Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Aiuto disperato ç_ç Winsock!
Forum - C/C++ - Aiuto disperato ç_ç Winsock!

Avatar
Nexos (Ex-Member)
Newbie


Messaggi: 7
Iscritto: 08/02/2008

Segnala al moderatore
Postato alle 19:58
Mercoledì, 23/04/2008
Salve a tutti..
Da un po' di tempo sto sbattendo la testa contro questo codice: all'apparenza sembra corretto, ma ogni volta che lo mando in esecuzione, dà errore sulla funzione Bind.
Il codice è questo:

Codice sorgente - presumibilmente C/C++

  1. #include<stdio.h>
  2. #include<winsock.h>
  3.  
  4. main()
  5. {
  6.       WSADATA wsdata;
  7.       int versione, funzione_bind, funzione_listen;
  8.       SOCKET server, accetta_connessioni;
  9.       SOCKADDR_IN parametri_server;
  10.       int lenght;
  11.       char mex[100];
  12.  
  13.       //inizializzazione
  14.       if((versione=WSAStartup(MAKEWORD(2,2), &wsdata))){
  15.                   printf("Errore nell'inizializzazione della socket\n");
  16.                   exit(-1);
  17.                   }
  18.       //creazione
  19.       if((server=socket(AF_INET, SOCK_STREAM, 0)==INVALID_SOCKET)){
  20.                                  printf("Errore nella creazione della socket\n");
  21.                                  WSACleanup();
  22.                                  exit(-1);
  23.                                  }
  24.       //assegnazione parametri
  25.       parametri_server.sin_family=AF_INET;
  26.       parametri_server.sin_addr.s_addr=INADDR_ANY;
  27.       parametri_server.sin_port=htons(1234);
  28.  
  29.       //bind
  30.       funzione_bind=bind(server, (struct sockaddr*)&parametri_server, sizeof(parametri_server));
  31.       if(funzione_bind==SOCKET_ERROR){
  32.                                              printf("Errore nell'associazione del nome X\n");
  33.                                              closesocket(server);
  34.                                              WSACleanup();
  35.                                              system("pause");
  36.                                              exit(-1);
  37.                                              }
  38.       //listen
  39.       if((funzione_listen=listen(server, 1))==SOCKET_ERROR){
  40.                                          printf("Errore in fase di ascolto\n");
  41.                                          closesocket(server);
  42.                                          WSACleanup();
  43.                                          exit(-1);
  44.                                          }
  45.       //accept
  46.       printf("Socket creata correttamente. In attesa di connessioni..\n\n");
  47.       while(1){
  48.                accetta_connessioni=ERROR;
  49.                while(accetta_connessioni==ERROR){
  50.                                                  accetta_connessioni=accept(server, NULL, NULL);
  51.                                                  }
  52.                server=accetta_connessioni;
  53.                break;
  54.                }
  55.  
  56.       //ricezione
  57.       do{
  58.                  recv(server, mex, 100, 0);
  59.                  printf("Messaggio ricevuto >> %s\n", mex);
  60.                  }while(strcmp(mex, "exit")==0);
  61.       getchar();
  62.  
  63.       //fine
  64.       closesocket(server);
  65.       WSACleanup();
  66. }



Ho davvero bisogno di poterlo fare funzionare... ._."


La disumanita' del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta (Isaac Asimov)
PM Quote
Avatar
FHF93 (Ex-Member)
Pro


Messaggi: 132
Iscritto: 13/11/2007

Segnala al moderatore
Postato alle 22:04
Mercoledì, 23/04/2008
guarda qui:

Codice sorgente - presumibilmente Plain Text

  1. //creazione
  2.       if((server=socket(AF_INET, SOCK_STREAM, 0)==INVALID_SOCKET)){
  3.                                  printf("Errore nella creazione della socket\n");
  4.                                  WSACleanup();
  5.                                  exit(-1);
  6.                                  }



hai sbagliato la condizione dell'if che dovrebbe essere scritta così

Codice sorgente - presumibilmente Plain Text

  1. if((server=socket(AF_INET, SOCK_STREAM, 0))==INVALID_SOCKET){



Fabrizio
Dio disse : "chi odia la scuola scagli la prima pietra" ... E così nacquero le montagne...
PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 22:08
Mercoledì, 23/04/2008
Il subdolo errore del tuo codice sta nella riga

Codice sorgente - presumibilmente Plain Text

  1. if((server=socket(AF_INET, SOCK_STREAM, 0)==INVALID_SOCKET))



che deve essere scritta cosi'

Codice sorgente - presumibilmente Plain Text

  1. if((server=socket(AF_INET, SOCK_STREAM, 0))==INVALID_SOCKET)



... fai attenzione alle parentesi ...

Ultima modifica effettuata da gantonio il 23/04/2008 alle 22:09
PM Quote
Avatar
FHF93 (Ex-Member)
Pro


Messaggi: 132
Iscritto: 13/11/2007

Segnala al moderatore
Postato alle 22:35
Mercoledì, 23/04/2008
uh gantonio abbiamo postato quasi insieme la stessa cosa :rotfl: :asd:


Fabrizio
Dio disse : "chi odia la scuola scagli la prima pietra" ... E così nacquero le montagne...
PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 22:43
Mercoledì, 23/04/2008
Testo quotato

Postato originariamente da FHF93:

uh gantonio abbiamo postato quasi insieme la stessa cosa :rotfl: :asd:



Vedo ... :-)

PM Quote
Avatar
Nexos (Ex-Member)
Newbie


Messaggi: 7
Iscritto: 08/02/2008

Segnala al moderatore
Postato alle 19:52
Venerdì, 25/04/2008
Vi ringrazio tantissimo, avrei potuto continuare a provare e provare se non vi foste accorti di quest'errore >.> Che sia di lezione!
Ad ogni modo, quello era il Server, e adesso funziona perfettamente. Potete controllare il Client? O.o

Codice sorgente - presumibilmente C/C++

  1. #include<stdio.h>
  2. #include<winsock.h>
  3.  
  4. main()
  5. {
  6.       WSADATA wsdata;
  7.       int versione, funzione_bind, funzione_connect;
  8.       SOCKET client, accetta_connessioni;
  9.       SOCKADDR_IN parametri_client;
  10.       char mex[100];
  11.  
  12.       //inizializzazione
  13.       if((versione=WSAStartup(MAKEWORD(2,2), &wsdata))){
  14.                   printf("Errore nell'inizializzazione della socket\n");
  15.                   exit(-1);
  16.                   }
  17.       //creazione
  18.       if((client=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP))==INVALID_SOCKET){
  19.                                  printf("Errore nella creazione della socket\n");
  20.                                  WSACleanup();
  21.                                  exit(-1);
  22.                                  }
  23.       //assegnazione parametri
  24.       parametri_client.sin_family=AF_INET;
  25.       parametri_client.sin_addr.s_addr=inet_addr("127.0.0.1");
  26.       parametri_client.sin_port=htons(1000);
  27.  
  28.       //connessione
  29.       if(funzione_connect=(connect(client,(SOCKADDR*)&parametri_client, sizeof(parametri_client))==SOCKET_ERROR)){
  30.                                              printf("Errore nell'associazione del nome\n");
  31.                                              closesocket(client);
  32.                                              WSACleanup();
  33.                                              system("pause");
  34.                                              exit(-1);
  35.                                              }
  36.       //invio
  37.       do{
  38.              printf("Messaggio da inviare:\t");
  39.              fflush(stdin);
  40.              gets(mex);
  41.              send(client, mex, 100, 0);
  42.              }while(strcmp(mex, "quit")==0);
  43.              getchar();
  44.  
  45.       //fine
  46.       closesocket(client);
  47.       WSACleanup();
  48. }



Grazie in anticipo ^^"


La disumanita' del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta (Isaac Asimov)
PM Quote
Avatar
FHF93 (Ex-Member)
Pro


Messaggi: 132
Iscritto: 13/11/2007

Segnala al moderatore
Postato alle 22:12
Venerdì, 25/04/2008
ci sono errori?


Fabrizio
Dio disse : "chi odia la scuola scagli la prima pietra" ... E così nacquero le montagne...
PM Quote
Avatar
Nexos (Ex-Member)
Newbie


Messaggi: 7
Iscritto: 08/02/2008

Segnala al moderatore
Postato alle 14:12
Sabato, 26/04/2008
Il programma si compila e si esegue, ma dà come output "errore nell'associazione del nome", ovvero il controllo sull'errore della connect
Non vorrei aver sbagliato qualcosa sui parametri a cui viene legata...


La disumanita' del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta (Isaac Asimov)
PM Quote
Avatar
FHF93 (Ex-Member)
Pro


Messaggi: 132
Iscritto: 13/11/2007

Segnala al moderatore
Postato alle 14:52
Sabato, 26/04/2008
mal'hai eseguito il server prima? :rotfl:
EDIT: semplice , le porte del server e del client sono diverse :rotfl:

Ultima modifica effettuata da FHF93 il 26/04/2008 alle 14:53


Fabrizio
Dio disse : "chi odia la scuola scagli la prima pietra" ... E così nacquero le montagne...
PM Quote