Salve.
Ho questo programma
Come potete vedere questo codice si connette ad un server ad una data porta ed invia una serie di dati.codice:if (argc != 6) { cout <<"Imbecille non va bene"; getchar(); return -1; } else cout <<"Argomenti ok"; for(int i=1; i<6; i++) { stringa.append(argv[i]); if(i<5) stringa.append("] ["); else stringa.append("] "); } WSADATA data; if (WSAStartup(MAKEWORD(2,0),&data) == SOCKET_ERROR) { cout <<"Impossibile inizializzare WSADATA"; return -1; } hostent *h = gethostbyname("host.host.it"); SOCKET sock = socket(PF_INET,SOCK_STREAM,0); if (sock == INVALID_SOCKET) { cout <<"Socket invalido"; return -1; } SOCKADDR_IN SockAddr; SockAddr.sin_port = htons(8000); SockAddr.sin_family = PF_INET; memcpy((char *)&SockAddr.sin_addr, (char *)h->h_addr_list[0], 4); cout <<" Connessione al server in corso"; for (int i = 0; i < 10; i++) { Sleep(50); cout <<"."; } cout <<endl; if (connect(sock,(SOCKADDR *)&SockAddr,sizeof(SockAddr)) != 0) { cout <<"Non sono riuscito a connettermi."; return -1; } send(sock,"login [ciao] [ciao]",28,0); send(sock,stringa.c_str(),static_cast<int>(stringa.length()),0); send(sock,"quit",4,0); for (int i = 0; i < 10; i++) { Sleep(50); cout <<"."; } cout <<endl; shutdown(sock,0); closesocket(sock); WSACleanup(); return 0; }
Normalmente il server per ogni stringa inviatagli da una risposta, che nel mio programmino non viene per niente considerata. Come posso ricevere le stringhe con cui il server risponde ai miei comandi?
So che si usa la funzione recv, ma non saprei come creare un adeguato ciclo, perchè come faccio a sapere quando il server mi sta inviando qualcosa?

Rispondi quotando
