|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Sep 2005
Messaggi: 218
|
[C] Winsock errore in fase di binding
ciao a tutti, scrivo perchè ho un problema molto antipatico, ho studiato in preparazione ad un esame universitario cosa sono le socket e come funzionano, con alcuni esempi di loro implementazioni purtroppo (per me) in ambiene UNIX, ho cercato qualche informazione per cominciare a realizzarne una io e ho cominciato la stesura di una socket server che faccia un local echo service.
(client logga, scrive ciao e gli ritorna ciao), purtroppo non riesce a bindare la socket ad una porta... vi riporto il codice, sarei contentissimo se mi aiutaste a risolvere! (SO Windows XP , localhost mi da qualche problema, non riesco a fare da cmd telnet localhost oppure telnet 127.0.0.1 ma non credo sia quello). #include <stdio.h> #include <stdlib.h> #include <winsock.h> int main(int argc, char *argv[]) { WSADATA wsaData; if (WSAStartup(MAKEWORD(1,1), &wsaData) !=0){ printf("Winsock startup fallito\n"); exit(1); } int sock,nsock; char buf[10]; struct sockaddr_in server,client; server.sin_family=PF_INET; server.sin_addr.s_addr = INADDR_ANY; server.sin_port = htons(atoi(argv[1])); if(sock = socket(PF_INET,SOCK_STREAM,0) ==-1) { printf("Error while creating the socket!\n"); system("PAUSE"); return 1; } printf("Ok, socket creata con id %d,\n",sock); int sockaddr_len = sizeof(INADDR_ANY); if(bind (sock, (struct sockaddr*)&server,sockaddr_len)==-1) { printf("Error while binding!\n"); system("PAUSE"); return 1; } printf("Ok, socket bindata alla porta %d dell' indirizzo %d\n",ntohs(server.sin_port), ntohs(server.sin_addr.s_addr)); if(listen(sock,2)==-1) { printf("Error while listening!\n"); system("PAUSE"); return 1; } while(1){ /*printf("Nuova sock, esito: %d\n",nsock=accept(sock, (struct sockaddr *)&client, &sockaddr_len)); /*continua a ripetere la frase perchè non fa correttamente bind nè listen, quindi non riesce ad andare in recv */ recv(nsock,buf,1024,0); send(nsock,buf,1024,0); close(nsock); } system("PAUSE"); return 0; } usando netstat non rilevo alcuna attivita sulla porta che scelgo mentre richiamo il programma, e quest ultimo non procede oltre la fase di binding (ritorna solo "Error while binding."). GRAZIE! |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Sep 2005
Messaggi: 218
|
con WSAGetLastError ho scoeprto che si tratta dell' errore 10038 :
Socket Error 10038 - The Descriptor is not a socket any help? ;-) |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Sep 2005
Messaggi: 218
|
risolto ;-) la bind nell' if non andava molto d'accordo..
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:12.



















