|
|
|
![]() |
|
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: 03:30.