begin process at 2012 05 28 17:21:16
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Réseau / Internet

 > 

bind bought bought lier


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

bind bought bought lier

dimanche 17 août 2003 à 16:08:37 | bind bought bought lier

JoebarGlut

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 () ;
}
dimanche 17 août 2003 à 16:23:40 | Re : bind bought bought lier

aardman

Membre Club
Salut,
Met un peu des WSAGetLastError() apres la creation du socket, apres le bind(), apres listen().


-------------------------------
Réponse au message :
-------------------------------

> 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 () ;
> }
>
dimanche 17 août 2003 à 16:42:25 | Re : bind bought bought lier

JoebarGlut

Tiens je connaissais pas cette fonction c'est sympa. :-)
alors il me retourne 10048, j'ai fouiné un peu et il semble donc que l'adresse ip existe deja.
J'ai donc changé le port (qui etait le meme que celui lançé sur ma propre machine) et ça fonctionne a merveille :-)
Je te remerci de m'avoir fait conaitre cette fonction.
bon code
a+



-------------------------------
Réponse au message :
-------------------------------

> Salut,
> Met un peu des WSAGetLastError() apres la creation du socket, apres le bind(), apres listen().
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > 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 () ;
> > }
> >
>
dimanche 17 août 2003 à 16:57:41 | Re : bind bought bought lier

aardman

Membre Club
Salut,
10048 c'est l'erreur WSAEADDRINUSE, quand bind() echoue c'est a 99% du temp a cause de ca.
En TCP, tu ne peut pas fermer un socket et tout de suite apres binder un autre socket sur le meme port, car l'adresse locale utilisée par l'ancien socket prend le status TIME_WAIT pendant un petit moment.


-------------------------------
Réponse au message :
-------------------------------

> Tiens je connaissais pas cette fonction c'est sympa. :-)
> alors il me retourne 10048, j'ai fouiné un peu et il semble donc que l'adresse ip existe deja.
> J'ai donc changé le port (qui etait le meme que celui lançé sur ma propre machine) et ça fonctionne a merveille :-)
> Je te remerci de m'avoir fait conaitre cette fonction.
> bon code
> a+
>
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Salut,
> > Met un peu des WSAGetLastError() apres la creation du socket, apres le bind(), apres listen().
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > 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 () ;
> > > }
> > >
> >
>


Cette discussion est classée dans : serveur, socket, host, cout, endl


Répondre à ce message

Sujets en rapport avec ce message

probleme sur une classe [ par NerOcrO ] Voici mon code :#include #include class Chanson //classe Chanson{ public: int Duree; char TypeDeFichier[3], Auteur[50], Titre[50], Interprete[50 Pas De Solution??? [ par PsyCaDi ] Bonjour,Voilà, je veux faire un truc tout con avec des tableaux mais ça ne marche pas. Quelqu'un peut-il me dire ce qui n'est pas bon (sauf moi, ça je Serveur Vc++6 pb dans recv [ par alfred ] Salut a tousJ'ai un probleme dans mon serveur et je ne sais pas comment le resoudre. Le client se connecte bien et envoie le bon nombre de caracteres encore mon serveur [ par skysee ] bonjour,je suis toujours avec mon serveur en c sous visual c++ sous windows(sis eulement j'avais linux).Le problème est que je n'ai pas d'erreur de co Debug de source à la con [ par PsyCaDi ] Bon voilà, je commence en C++ et j'ai envie de faire un petit prog pour faire des calculs avec des matrice enfin bref mon PB c'est que le code que j'a que des boucles. [ par pratix ] Salut à tous.Je post mon prg cherchenbr modifié (voir sujet précédent ''int main" ).Programme compilé avec visual C++ 06. ( zéro erreur )j'ai essay caractere speciaux a afficher en boucle [ par ranouf ] #include void main (){ cout cout cout}comment faire pour automatiser cette tache ?j'aurai besoin de savoir a koi correspon c++ algo [ par altay ] L'analyste programmeur a 3 dimensionest ce que quelqu'un pourrait me faire l'algo de ce code merci d'avance :#pragma hdrstop#include #include algo C++ [ par altay ] L'analyste programmeur a 3 dimensionest ce que quelqu'un pourrait me faire l'algo de ce code merci d'avance :#pragma hdrstop#include #include sockets: méthode accept() [ par julien20vt ] Voila,je viens de coder le serveur de ma socket et ce qui me parait etrange c'est que la méthode accept() n'est pas bloquante, je pensais que le serve


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,858 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales