Salut, j'ai un piti problem de bind, kelkun peut il m'eclairer ?
j'explik : (c'est un client qui se metamorphose en serveur ou en client suivant ce qu'il a reçu etant client (lol))
- je me connecte a mon sevreur (127.0.0.1)
- si il m'envoit le message "HOST" je quitte le serveur et en cree moi meme un nouveau.
- si il m'envoit une ip, je quitte le serveur pour me connecter a un autre.
c'est au moment ou je cree le serveur ke mon bind marche pas, il me semble pourtant avoir tout initialisé correctement ?
De plus c'est pas mon premier serveur donc y'a pas de raison ke ça ne fonctionne pas.
le source :
void join :: HostOrJoin()
{
memset(szBuffer,0,sizeof(szBuffer));
recv ( sCom , szBuffer , LG_BUF , 0 ) ;
if(strcmp("HOST",szBuffer)==0)
{
closesocket(sCom);
WSACleanup () ;
creer_partie() ;
cout << "partie cree. attente d'un joueur..." << endl ;
}
else
{
closesocket(sCom);
WSACleanup () ;
join_partie(szBuffer) ;
cout << "tentative de connexion avec " << szBuffer << endl ;
}
}
void join :: creer_partie()
{
int octet_recu ;
struct sockaddr_in client ;
int taille_adresse = sizeof (struct sockaddr_in) ;
HWND Hwnd = NULL ;
struct sockaddr_in serveur ;
//WSADATA wsaData ;
SOCKET socket_host ;
SOCKET socket_host2 ;
/* initialistaion de sockaddr_in du serveur */
memset ( &serveur , 0 , sizeof ( struct sockaddr_in ) ) ;
serveur.sin_family = AF_INET ;
serveur.sin_port = htons ( 4002 ) ;
serveur.sin_addr.s_addr = INADDR_ANY ;
/* initialistation de ws2_32.dll */
WSAStartup ( MAKEWORD( 2 , 2 ) , &wsaData ) ;
/* ouverture d'un socket de communication */
if ( ( socket_host = socket ( AF_INET , SOCK_STREAM , IPPROTO_TCP ) ) == -1 )
{
cout << "erreur lors de la creation de la socket" << endl ;
Sleep(10000);
exit(-1) ;
}
// else
cout << "numero de socket : " << socket_host << endl ;
if ( bind ( socket_host , (struct sockaddr *)&serveur , taille_adresse ) )
{
cout << "arff encore le bind !!!" << endl ;
Sleep(10000);
exit(-1) ;
}
// else
cout << "bind OK" << endl ;
Sleep(10000) ;
if ( listen ( socket_host , 2 ) == -1 )
{
cout << "erreur de listen" << endl ;
Sleep(10000);
exit(-1) ;
}
// else
cout << "listen OK" << endl ;
Sleep(10000) ;
socket_host2 = accept ( socket_host , (struct sockaddr *)&client , &taille_adresse ) ;
cout << "Un joueur est connecte : " << endl ;
Sleep(10000) ;
closesocket ( socket_host2 ) ;
closesocket ( socket_host ) ;
WSACleanup () ;
}