BMenez | J'ai un problème avec les sockets en PERL. Voila le bout de code du serveur en PERL :
Code :
- my $sth = $dbh->prepare(qq{select * from projet});
- $sth->execute();
- $numrows=$sth->rows;
- print "Sending ".$numrows." projects\n";
- print $client $numrows;
- for($i=0;$i<$numrows;$i++)
- {
- ($id,$name)=$sth->fetchrow_array();
- $mess=$id."=".$name;
- print "Sending ".$mess."\n";
- print $client $mess;
- }
- $sth->finish();
- $dbh->disconnect();
|
Je souhaiterais que le programme envoie un paquet par projet.
Code :
- $mess=$id."=".$name;
- print $client $mess;
|
Voila mon client en C
Code :
- nRet = recv(Socket, retour, sizeof(retour), 0);
- if (nRet == SOCKET_ERROR)
- {
- wsprintf(retour,"Probleme réseau: recv\n%d",WSAGetLastError());
- MessageBox(0,retour,"Erreur",MB_OK);
- return FALSE;
- }
- memcpy(ret,retour,nRet);
- ret[nRet]='\0';
- sscanf(ret,"%d",&result);
- wsprintf(retour,"%s,%d",ret,nRet);
- MessageBox(0,retour,"OK",MB_OK);
- while(result)
- {
- nRet = recv(Socket, retour, sizeof(retour), 0);
- if (nRet == SOCKET_ERROR)
- {
- wsprintf(retour,"Probleme réseau: recv\n%d",WSAGetLastError());
- MessageBox(0,retour,"Erreur",MB_OK);
- return FALSE;
- }
- memcpy(ret,retour,nRet);
- ret[nRet]='\0';
- sscanf(ret,"%d=%s",&nRet,retour);
- nRet+=10000;
- wsprintf(retour,"%s,%d",ret,nRet);
- MessageBox(0,retour,"OK",MB_OK);
- result--;
- }
|
Voila le résultat que j'obtiens :
Alors que je voudrais qu'il m'affiche d'abord une boite de dialogue avec "3" puis une avec "0=projet0" puis "1=projet1", etc...
Est-ce que cela vient de mon implémentation ? des sockets C ? des sockets PERL ?
Dois-je faire un système de confirmation de réception entre chaque paquets ?
Merci d'avance pour votre aide
A+
|