1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
void *newClient(void* data)
{
donnees* a = (donnees*)data;
//Socket client
SOCKET client;
//Definition socket client
SOCKADDR_IN csin;
int sinsize = sizeof(csin);
if((client = accept(a->server, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
{
//Reception taille du pseudo
int recvValue = 0;
recv(client, (char *)&recvValue, sizeof(recvValue), 0);
recvValue = ntohl(recvValue);
//Reception du pseudo
char *buffer = new char[recvValue];
recv(client, buffer, recvValue, 0);
//Ajout du peer dans la liste (section critique)
CPeer peer(string(buffer), (string)inet_ntoa(csin.sin_addr));
a->liste.add(peer);
//On supprime le buffer en memoire
delete[] buffer;
while(1){
//Envoi de la taille du buffer
int sendValue = htonl(a->liste.peerlistToString().size()+1);
send(client, (const char*)&sendValue, sizeof(sendValue), 0);
//Envoi du buffer (liste des peers)
send(client, a->liste.peerlistToString().c_str(), a->liste.peerlistToString().size()+1, 0);
}
}
return NULL;
} |
Partager