|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: May 2005
Messaggi: 249
|
[C] socket non funziona
Ragazzi sono alle prime esperienze con la socket, ho creato semplicemente un client e un server che devono scriversi qualche frase e premetto che ho seguito alla lettera il codice e l'esempio della guida ma non funziona
il codice del server è Codice:
/* Creazione del Server */
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <errno.h>
#define PORT 4000
#define CONNMAX 10
int main(){
int sock,newsock;
struct sockaddr_in server;
char buffer[100];
/*creiamo la socket e memorizziamo in sock il descriptor*/
if((sock=socket(AF_INET,SOCK_STREAM,0))<0){
perror("socket");
exit(1);
} else {
printf("Socket creata\n");
}
/*assegniamo indirizzo e porta mediante bind*/
server.sin_family=AF_INET;
server.sin_addr.s_addr= INADDR_ANY;
server.sin_port = htons(PORT);
bind(sock,(struct sockaddr*) &server,sizeof(server));
/*la socket si pone in ascolto*/
if(listen(sock,CONNMAX)<0){
perror("listen");
exit(1);
} else {
printf("socket in ascolto\n");
}
/*la socket accetta la richiesta di connessione dal Client*/
if (newsock=accept(sock,NULL,NULL)<0){
perror("accept");
exit(1);
} else { printf("Server: connessione accettata\n");
}
write(newsock,"sono il server",sizeof("sono il server"));
return 0;
}
Quando eseguo il client mi risulta la frase "Server: connessione accettata" quindi deduco che la connessione è avvenuta, e allora perché succede tutto ciò?? Spero possiate aiutarmi |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
Allora guarda il problema è che a newsock viene assegnato il descrittore 0, che di default è lo standard output! Puoi verificarlo da solo mettendo una
Codice:
printf("Descrittore newsock --> %d\n", newsock);
puoi ovviare a questo problema in questo modo Codice:
newsock=accept(sock,NULL, NULL);
if (newsock<0){
perror("accept");
exit(1);
} else { printf("Server: connessione accettata\n");
}
//printf("Descrittore numero %d\n", newsock);
write(newsock,"sono il server",sizeof("sono il server"));
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:34.


















