Oppure

Loading
23/04/08 17:58
Nexos
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:

#include<stdio.h>
#include<winsock.h>

main()
{
      WSADATA wsdata;
      int versione, funzione_bind, funzione_listen;
      SOCKET server, accetta_connessioni;
      SOCKADDR_IN parametri_server;
      int lenght;
      char mex[100];

      //inizializzazione
      if((versione=WSAStartup(MAKEWORD(2,2), &wsdata))){
                  printf("Errore nell'inizializzazione della socket\n");
                  exit(-1);
                  }
      //creazione
      if((server=socket(AF_INET, SOCK_STREAM, 0)==INVALID_SOCKET)){
                                 printf("Errore nella creazione della socket\n");
                                 WSACleanup();
                                 exit(-1);
                                 }
      //assegnazione parametri
      parametri_server.sin_family=AF_INET;
      parametri_server.sin_addr.s_addr=INADDR_ANY;
      parametri_server.sin_port=htons(1234);

      //bind
      funzione_bind=bind(server, (struct sockaddr*)&parametri_server, sizeof(parametri_server));
      if(funzione_bind==SOCKET_ERROR){
                                             printf("Errore nell'associazione del nome X\n");
                                             closesocket(server);
                                             WSACleanup();
                                             system("pause");
                                             exit(-1);
                                             }
      //listen
      if((funzione_listen=listen(server, 1))==SOCKET_ERROR){
                                         printf("Errore in fase di ascolto\n");
                                         closesocket(server);
                                         WSACleanup();
                                         exit(-1);
                                         }
      //accept
      printf("Socket creata correttamente. In attesa di connessioni..\n\n");
      while(1){
               accetta_connessioni=ERROR;
               while(accetta_connessioni==ERROR){
                                                 accetta_connessioni=accept(server, NULL, NULL);
                                                 }
               server=accetta_connessioni;
               break;
               }

      //ricezione
      do{
                 recv(server, mex, 100, 0);
                 printf("Messaggio ricevuto >> %s\n", mex);
                 }while(strcmp(mex, "exit")==0);
      getchar();

      //fine
      closesocket(server);
      WSACleanup();
}


Ho davvero bisogno di poterlo fare funzionare... ._."
aaa
23/04/08 20:04
FHF93
guarda qui:

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


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

if((server=socket(AF_INET, SOCK_STREAM, 0))==INVALID_SOCKET){
aaa
23/04/08 20:08
gantonio
Il subdolo errore del tuo codice sta nella riga

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


che deve essere scritta cosi'

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


... fai attenzione alle parentesi ...
Ultima modifica effettuata da gantonio 23/04/08 20:09
aaa
23/04/08 20:35
FHF93
uh gantonio abbiamo postato quasi insieme la stessa cosa :rotfl: :asd:
aaa
23/04/08 20:43
gantonio
Postato originariamente da FHF93:

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


Vedo ... :-)
aaa
25/04/08 17:52
Nexos
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

#include<stdio.h>
#include<winsock.h>

main()
{
      WSADATA wsdata;
      int versione, funzione_bind, funzione_connect;
      SOCKET client, accetta_connessioni;
      SOCKADDR_IN parametri_client;
      char mex[100];

      //inizializzazione
      if((versione=WSAStartup(MAKEWORD(2,2), &wsdata))){
                  printf("Errore nell'inizializzazione della socket\n");
                  exit(-1);
                  }
      //creazione
      if((client=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP))==INVALID_SOCKET){
                                 printf("Errore nella creazione della socket\n");
                                 WSACleanup();
                                 exit(-1);
                                 }
      //assegnazione parametri
      parametri_client.sin_family=AF_INET;
      parametri_client.sin_addr.s_addr=inet_addr("127.0.0.1");
      parametri_client.sin_port=htons(1000);

      //connessione
      if(funzione_connect=(connect(client,(SOCKADDR*)&parametri_client, sizeof(parametri_client))==SOCKET_ERROR)){
                                             printf("Errore nell'associazione del nome\n");
                                             closesocket(client);
                                             WSACleanup();
                                             system("pause");
                                             exit(-1);
                                             }
      //invio
      do{
             printf("Messaggio da inviare:\t");
             fflush(stdin);
             gets(mex);
             send(client, mex, 100, 0);
             }while(strcmp(mex, "quit")==0);
             getchar();

      //fine
      closesocket(client);
      WSACleanup();
}


Grazie in anticipo ^^"
aaa
25/04/08 20:12
FHF93
ci sono errori?
aaa
26/04/08 12:12
Nexos
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...
aaa