Bonjour,
je ne sais pas si je me pose la bonne question par rapport à mon problème, mais je pense qu'ici est le bon endroit pour obtenir une réponse ou la bonne question.
J'ai développé une application Client/Serveur TCP/IP sur des machines équipées d'OS différents (MacOs / WinXP), le Serveur étant hébergé sur la machine Windows et développé autour de l'API CAsyncSocket.
Je n'ai pas (ou plus) de problème de communication, et mes échanges se passent sans problème.
J'en viens au point qui m'intéresse, et qui concerne la connection/reconnection du client :
Le fonctionnement de la connection de chaque client se passe ainsi :
1 - Je mets mon Serveur à l'écoute
2 - Mon client demande à se connecter
3 - CAsyncSocket::OnAccept() est déclenchée
4 - et ensuite...
Ici, je connais l'adresse du client une fois que sa demande de connection a été acceptée... Or, je shouhaiterais, une fois que la connection a été établie une première fois, sauvegarder cette adresse afin de la comparer ultérieurement en cas de renouvellement de connection (si la connection a été interrompue entre temps), et ce AVANT de faire le accept.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 if (IDYES ==AfxMessageBox ("Do you want to accept the incoming connection", MB_YESNO)) { Accept(*m_Client); CString tmpStr; UINT tmpPort; m_Client->GetPeerName(tmpStr,tmpPort); //(...) (utilisation de ces infos) }
Or, si je fais GetPeerName() sur mon serveur avant le Accept(...), je reçois une chaîne vide...
Je suppose que d'une façon ou une autre, l'adresse du client qui demande la connection est forcément disponible... mais je ne sais pas comment accéder à cette information.
Est-ce que vous avez une idée?
PS : la seule idée qui me venait à l'esprit était de faire le Accept, puis de vérifier, et de faire un close() directement derrière après comparaison des IPs.
Mais ça ne me semble pas une solution "propre"...
Partager