|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Apr 2007
Messaggi: 924
|
[C++] Problemi con la creazione di un server con winsock
Ciao, ho bisogno di collegare due eseguibili in rete. Uno deve essere client e l'altro server. Per il client uso una mia funzione che fin'ora non mi ha mai dato problemi, ma per il server non so come fare.
Ho provato modificando la mia funzione, ma non funziona. Ve la mostro: Codice:
//Impostazione socket e connessione con l'host //con option=1 imposta il socket e si connette al server host:port //con option=2 chiude la connessione //con option=3 imposta il socket in modalità server //controlla automaticamente se l'host è un IPV4 o un dominio //restituisce: // -1 se c'è stato un errore generico (molto probabilmente un errore di sintassi nella function call) // 0 se ha eseguito le operazioni senza errori // 1 se non è riuscito ad inizializzare o terminare il socket (WSAStartup(), WSACleanup()) // 2 se non è riuscito ad importare l'host // 3 se non è riuscito a creare il socket // 4 se non è riuscito a ricevere una connessione (impostato come server) int connessione(int option, char *server, int porta) { switch (option) { case 1: //Connessione { if (WSAStartup(MAKEWORD(2,0),&data)!=0) return 1; conn=socket(PF_INET,SOCK_STREAM,0); conn_addr.sin_family=PF_INET; if (inet_addr(server)==INADDR_ANY || inet_addr(server)==INADDR_NONE) //Con il nome dell'host { conn_addr.sin_port=htons(porta); host=gethostbyname(server); } else //Con indirizzo IP { conn_addr.sin_port=htons(porta); indirizzo.s_addr= inet_addr(server); host=gethostbyaddr((char *)&indirizzo,4, AF_INET); } if (host==NULL) return 2; //Errore nell'impostazione dell'host conn_addr.sin_addr = *((LPIN_ADDR)*host->h_addr_list); lun=sizeof(struct sockaddr); if(connect(conn,(struct sockaddr*)&conn_addr,lun)!=0) return 3; //Socket non creato return 0; //OK } case 2: //Chiusura socket { if (closesocket(conn)!=0) return 1; if (WSACleanup()!=0) return 1; host=NULL; return 0; //OK } case 3: //Connessione come server { if (WSAStartup(MAKEWORD(2,0),&data)!=0) return 1; conn=socket(PF_INET,SOCK_STREAM,0); conn_addr.sin_family=PF_INET; conn_addr.sin_port=htons(porta); inet_addr(server)==INADDR_ANY; if (bind(conn,(struct sockaddr*)&conn_addr,sizeof(struct sockaddr_in))!=0) return 3; lun=sizeof(struct sockaddr); sk_srv=accept(conn,(struct sockaddr*)&srv_addr,&lun); if (sk_srv==INVALID_SOCKET) return 4; } default: { return -1; //Errore di sintassi nella function call } } return -1; //Errore di sintassi nella function call } |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2007
Messaggi: 924
|
UP
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:50.