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

C

 > 

Windows

 > 

Réseau & Internet

 > 

Bind echouant..


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

Bind echouant..

lundi 14 mai 2007 à 01:08:17 | Bind echouant..

lektrosonic

Bonsoir, deux applications, bon pour etre original: serveur et client.
Chacune de leur cote effectue ce code:
Serveur:
----------------------
   if(WSAStartup(MAKEWORD(2,0),&WSAData)!=NO_ERROR)
    {
       ...
    }
    ws_sin.sin_family=AF_INET;
    ws_sin.sin_port=htons(port);
    ws_sin.sin_addr.s_addr=INADDR_ANY;
    sock_main=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    if(sock_main==INVALID_SOCKET)
    {
        ...
    }
    if(bind(sock_main,(SOCKADDR *)&ws_sin,sizeof(ws_sin))==SOCKET_ERROR)
    {
        ...
    }
    if(WSAAsyncSelect(sock_main,hwnd,WM_SOCKET,FD_ACCEPT|FD_READ|FD_WRITE|FD_CLOSE)!=0)
    {
        ...
    }

Client:
----------------------------------
if(WSAStartup(MAKEWORD(2,0),&WSAData)!=NO_ERROR)
    {
        ...
    }
    ws_sin.sin_family=AF_INET;
    ws_sin.sin_port=htons(hport);
    ws_sin.sin_addr.s_addr=inet_addr(host);
    sock_main=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    if(sock_main==INVALID_SOCKET)
    {
        ...
    }
    if(bind(sock_main,(SOCKADDR *)&ws_sin,sizeof(ws_sin))==SOCKET_ERROR)
    {
        ...
    }
    if(WSAAsyncSelect(sock_main,hwnd,WM_SOCKET,FD_ACCEPT)!=0)
    {
        ...
    }

Le probleme est si le port = hport, et supposons que je lance le serveur avant le client, le bind du client echou. Il retourne l erreur WSAEADDRINUSE. Sur MSDN:...only one usage of each socket address (protocol/IP address/port) is permitted...

1)Comment? Pour que mon client se connect a mon serveur il fau bien que port=hport ! Ben apparament MSDN me dit que je peux pas... Cela veu dire que je ne peux pas tester mes applications en locale ?

2)MSDN aussi affirme que pour un client , il n'est pas necessaire de faire un bind...

Merci d'avance

l3KTr0 Was HeRe
lundi 14 mai 2007 à 01:17:31 | Re : Bind echouant..

lektrosonic


**correction dans 1):  port = hport --> port != hport
l3KTr0 Was HeRe
lundi 14 mai 2007 à 01:58:32 | Re : Bind echouant..

aardman

Membre Club
Salut,
Le truc c'est qu'il n'y a pas un port en jeu dans une connexion, mais deux: un port distant et un port local (qui vont de paire avec les adresses ip distantes et locales).
Quand on se connecte a un serveur, le port choisi localement n'a pas vraiment d'importance, c'est pour ca que le bind est pas vraiment utile, il est donc choisi au hazard parmis les ports libres par la fonction connect.



lundi 14 mai 2007 à 11:01:33 | Re : Bind echouant..

lektrosonic

Le serveur ecoute a un port X. Le client, pour se connecter au serveur, il doit se connecter a l'adresse du serveur et au port X non ?


l3KTr0 Was HeRe
lundi 14 mai 2007 à 16:52:50 | Re : Bind echouant..

aardman

Membre Club
Salut,
Exactement, du point de vue du client, le port distant est X, c'est donc celui la qu'il faut passer dans le connect (avec l'adresse du serveur). Toujours du point de vue du client, le port local n'est pas important, donc généralement on ne le choisi pas.
Ce que tu pourrais faire, pour mieux cerner les choses, c'est d'appeler getsockname et getpeername sur chaque socket du coté client et du coté serveur (une fois la connection établie), ces deux fonctions affichent respectivement l'adresse locale et distante attachées a un socket. 
Normalement tu devrais voir tout ce qu'on a dit plus haut: le port distant du client sera X, le port local du client sera aleatoire, le port local du serveur sera X, et le serveur n'a pas de port distant (getsockname devrait échouer).



Cette discussion est classée dans : socket, ws, sin, sock, main


Répondre à ce message

Sujets en rapport avec ce message

WSAAsyncSelect [ par lektrosonic ] Bonsoir,Je code un serveur, voici la partir du code relative aux sockets:---------------------------------------------------------------if(WSAStartup( Socket en c avec winsock2.h [ par juju11288 ] Bonjour a tous je voudrai pour le moment arriver a faire un client serveur en c qui parle entre eux avec le protocole TCP/IP. Je fait les deux  progra socket trop lents [ par cid7777777 ] bonjour,jessaye de faire un jeu qui peu se jouera 2 en reseau local.je ne connais absolument rien en reso, mais en fouillant sur le net,  jai trouver Probleme Winsock [ par fredsor ] Salut a vous, Je suis toujours en train de passer une appli de embedded visual c++ (donc pour Windows CE => Pocket Pc) vers DevC++ (windows "normal", probleme boucles mutliple avec les sockets [ par miki42 ] Bonjour a tous voila j'ai pa le choix,deja une semaine que je mord la langue pour trouver dou vient mon probleme mais rien y fait suit obliger de fari Socket Requette HTTP Post - Enlever le header de la réponse [ par SuperChouquette ] Bonjour, je suis débutant et à l'aide d'autres sources j'ai créer une fonction pour envoyer une requete POST à un serveur web, celle-ci fonctionne bie Problème de connexion Socket [ par qhhu ] Bonjour !En temp normal, je programme en java, mais j'ai voulu essayer le c++parce que je trouve que c'est interessant de connaître plusieurs language RECV() TELNET [ par kiki67100 ] Bonjour j'ai fait un serveur en c++ Mais le probleme c'est que mon code lit le recv() de telnet caractere par caractere et moi je voudrais phrase par Connexion SOCKET_ERROR [ par fredsor ] Salut a tous,Je réalise un ptit programme au sein duquel je me connecte a un serveur distant, afin de récupérer via une methode GET des informations n


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,546 sec (4)

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