Salve.
Ho questo programma
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;
}
Come potete vedere questo codice si connette ad un server ad una data porta ed invia una serie di dati.
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?