lucichose
Messages postés39Date d'inscriptionmardi 29 juillet 2008StatutMembreDernière intervention 7 mars 2012
-
Modifié par lucichose le 17/06/2010 à 11:18
Bonjour,
j'ai un soucis en programmation réseau. j'ai réalisé la connexion client serveur tout se passe bien , cependant pour la suite ... c'est pas encore ça :p .
j'ai ouvert une socket que j'appellerais " Socket1 "en émission réception , lorsque je fait les accept ( ) coté serveur , cela m'ouvre une nouvelle socket que j'appellerais " Socket2 " pour la connexion distante qui tentais de se connecter. Ensuite je fait un select sur "Socket 1" cela me retourne 2 . J'essaye donc de récupérer le message qui est envoyer et que le select a détecter, je fait donc un recvfrom avec la "socket1" mais a ce moment la ça me retourne -1.
j'ai donc fait un perror ( "recvfrom" ); et il me log: NO ERROR....
serais ce possible de m'expliquer où ce trouve mon erreur plz ?
Merci d'avance
voici plus concrètement le code:
while ( !bClose )
{
ID_IP.clear ( );
//Verouille le mutex
WaitForSingleObject ( myMutex, NULL );
//Recuperation des données des utilisateurs connectés
TheServer->Get_myID_Ip_User ( ID_IP );
//Lock le mutex
ReleaseMutex ( myMutex );
if ( !ID_IP.empty ( ) )
{
//Creation d'un iterateur au debut de la map
kstl::map < int, CONNEXION* >::iterator It = ID_IP.begin ( );
fd_set Set_Read;
fd_set Set_Exept;
fd_set Set_Write;
struct timeval tv;
struct sockaddr_in SenderInfo;
SenderInfo.sin_family = AF_INET;
tv.tv_sec = 0;
tv.tv_usec = 10000;
//Parcour de la map
while ( It != ID_IP.end ( ) )
{
FD_ZERO ( &Set_Read );
FD_ZERO ( &Set_Exept );
FD_ZERO ( &Set_Write );
FD_SET ( ( *It ).second->Socket, &Set_Read );
FD_SET ( ( *It ).second->Socket, &Set_Write );
FD_SET ( ( *It ).second->Socket, &Set_Exept );
It++;
}
int iValue = select ( 0, &Set_Read, &Set_Write, &Set_Exept, &tv );
if ( iValue )
{
kstl::map < int, CONNEXION* >::iterator It = ID_IP.begin ( );
while ( It != ID_IP.end ( ) )
{
if ( FD_ISSET ( ( *It ).second->Socket, &Set_Read ) )
{
int test = 1;
//Sauvegarder la connexion en lecture
}
if ( FD_ISSET ( ( *It ).second->Socket, &Set_Write ) )
{
int test = 1;
//Sauvegarder la connexion en ecriture
}
if ( FD_ISSET ( ( *It ).second->Socket, &Set_Exept ) )
{
int test = 1;
//Sauvegarder la connexion en erreur
}
It ++;
}
}
char tab [1024*10] = {0};
int lenght = sizeof ( &SenderInfo );
kstl::map < int, CONNEXION* >::iterator It2 = ID_IP.begin ( );
int iReceiveLenght = recvfrom ( mySocket, tab, 1024*10, 0, ( struct sockaddr* ) &SenderInfo, &lenght ); // mySocket correspond a la socket ouverte en emission reception sur le serveur ( TCP ) ( "Socket1" dans ma description )
if ( iReceiveLenght > 0 )
{
printf ( "Paquet recu\n");
}
else
{
perror( "recvfrom" );
printf ( "Paquet non recu\n" );
}
}
}
return 0;