21/12/08 12:40
trenta3
Vi volevo segnalare che ho trovato un ottimo tutorial sui thread (forum.html.it/forum/showthread/…) e ho fatto questo programma come server:
Il problema è che, nel thread chiamato thread1 quando c'è il comando recv il programma non riconosce server(1° parametro) perchè sta nell'altra funzione(main), come posso fare?
Help Me!
#include <stdio.h> #include <winsock.h> #include <windows.h> long WINAPI Thread1(LPWORD ret); int cl= 100; int main (){ HANDLE hThread[1]; DWORD dwID[1]; int count=0; int d; WSADATA wsadata; int Versione= WSAStartup(MAKEWORD(2,2),&wsadata); if(Versione!=NO_ERROR){ printf("Errore nell'inizializzazione delle socket\n"); return 1; } SOCKET server; server=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(server==INVALID_SOCKET){ printf("Errore: Socket non valida\n"); return 1; } SOCKADDR_IN parametri_server; parametri_server.sin_family=AF_INET; parametri_server.sin_addr.s_addr = INADDR_ANY; parametri_server.sin_port=htons(1000); int funzione_bind; funzione_bind=bind( server, (SOCKADDR*) ¶metri_server, sizeof(parametri_server)); if(funzione_bind ==SOCKET_ERROR ){ printf("Funzione bind non riuscita\n"); closesocket(server); WSACleanup(); return 1; } int funzione_listen; funzione_listen=listen(server,1); if(funzione_listen ==SOCKET_ERROR){ printf("Errore nella funzione listen \n"); closesocket(server); WSACleanup(); return 1; } SOCKET Accetta_connessioni; printf("Attendo la connesione di un client\n"); while(1){ Accetta_connessioni=ERROR; while(Accetta_connessioni==ERROR){ Accetta_connessioni=accept(server,NULL,NULL); } printf("Un client ha effettuato una connessione!\n"); count ++; cl ++; printf("N. client: %d\n", cl); printf("Client connessi: %d\n\n", count); hThread[0] = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread1,NULL,0,&dwID[0]); } } long WINAPI Thread1(LPWORD ret) { int ricevuto; char ricezione_dati[256]; do{ recv(server,ricezione_dati,256,0); printf("\nHo ricevuto dal client%d>>> %s ",cl,ricezione_dati); } while(strcmp(ricezione_dati,"Chiuditi")!=0); getchar(); closesocket(server); WSACleanup(); return 0; }
aaa