Adresse IP d'un TcpClient

Résolu
Thufenn Messages postés 14 Date d'inscription vendredi 24 octobre 2003 Statut Membre Dernière intervention 15 juin 2006 - 14 juin 2006 à 15:38
Thufenn Messages postés 14 Date d'inscription vendredi 24 octobre 2003 Statut Membre Dernière intervention 15 juin 2006 - 15 juin 2006 à 10:25
Bonjour tout le monde,
Voilà mon pb.

j'ai un systeme client-serveur dans lequel mes clients envoie des ordres d'executions (avec une connexion TCP), le serveur stocks les demandes et les traitent au fur et à mesure. Quand le traitement est fini, je voudrais retourner un petit message (style net send) au pc qui a fait la demande que le serveur viens de traiter. Bien evidement le contexte fait que je ne peux pas conserver la connexion TCP lors du traitement des demandes.Donc connaissez-vous un moyen de connaitre l'adresse IP lors de la reception des demandes du client ?

voici un extrait simplifié du code serveur :
MyTCPListener = new TcpListener(Dns.Resolve(Dns.GetHostName()).AddressList[0], PortServeur);
MyTCPListener.Start();

while (!StopListen)
{
//Attente de connection...
TcpClient client = MyTCPListener.AcceptTcpClient();

//Création du flux de données sous-jacent pour l'accès au réseau.
NetworkStream ns = client.GetStream();

try {
//Reception d'un message
byte[] bytemsg = new byte[1024];
int bytesRead = ns.Read(bytemsg, 0, bytemsg.Length);
string msg =Encoding.ASCII.GetString(bytemsg,0,bytesRead);
TamponMsg.Add(Msg);
//Fin de la Connection
ns.Close();
client.Close();
} catch (Exception e) {
MessageBox.Show(e.ToString());
}
}


D'avance merci
A voir également:

7 réponses

Thufenn Messages postés 14 Date d'inscription vendredi 24 octobre 2003 Statut Membre Dernière intervention 15 juin 2006
14 juin 2006 à 15:47
désolé mais j'ai mis des saut de ligne dans mon message et il sont pas passé
3
cs_fcolo Messages postés 201 Date d'inscription mercredi 8 février 2006 Statut Membre Dernière intervention 20 février 2007 2
14 juin 2006 à 15:49
L'idée qui me vient est que plutot d'utiliser une ArrayList pour le TamponMsg, fait plutot un dictionnaire dans lequel la clé serait ton message et pour la valeur l'IP de l'émetteur.
Ensuite, lorsque tu traitera le message, tu récupèrera en plus l'IP.
Par contre, il faudra que l'emmeteur initial (qui sera ensuite le recepteur pour le message de confirmation) ait en internet un serveur TCP pour réceptionner cette réponse, donc un port d'écoute, donc il faudra aussi connaitre le port. Donc faire une structure IP/Port que tu sauvera dans le dictionnaire plutot que juste l'IP.

Je sais pas si ca peut t'aider et si je dis pas de connerie surtout ...

f.colo
3
Thufenn Messages postés 14 Date d'inscription vendredi 24 octobre 2003 Statut Membre Dernière intervention 15 juin 2006
14 juin 2006 à 16:04
Merci F.colo pour ta réponse. Ce que j'ai mis n'ai qu'une version très très simplifié de ce que j'utilise. Les messages etant un peu complexe la structure utilisé n'est pas une arraylist de string mais une arraylist d'objet dans lequel il y a de quoi stocker un adresse IP.
Mais mon soucis c'est que je ne sais pas comment obtenir IP à partir du TCPClient???
Pour ce qui est de l'envoie de la reponse vue que je compte utilise 'Net Send' il y aura pas besoin de serveur ni de port pour le recevoir (pour info net send fonctionne un 'peu' comme un MessageBox à qui tu donne le nom ou l'adresse ip de l'ordi sur lequel tu veux qu'il s'affiche après c'est windows qui gère)
3
cs_fcolo Messages postés 201 Date d'inscription mercredi 8 février 2006 Statut Membre Dernière intervention 20 février 2007 2
14 juin 2006 à 16:51
Avec un truc comme ca:

IPAddress ip = ((IPEndPoint)client.Client.RemoteEndPoint).Address;

J'ai pas tester, juste regarder ce que propose visual studio.
Ca me semblait bien c'eest tout :)

f.colo
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Thufenn Messages postés 14 Date d'inscription vendredi 24 octobre 2003 Statut Membre Dernière intervention 15 juin 2006
15 juin 2006 à 10:25
Le soucis c'est que la propriété client de l'objet TCPClient est une propriété protégée, donc je n'y ai pas accès (erreur CS0122)
Neanmoins la piste est assez interresante puisque en fait il semblerait que le seul endroit ou je puisse avoir accès à l'adresse IP soit au niveau du socket. Je vais donc essayer de remplacer :
TcpClient client = MyTCPListener.AcceptTcpClient();
par quelque chose du genre :
Socket MySocket = MyTCPListener.AcceptSocket();
après il faudra aussi modifier la reception des messages.
Merci F.colo
3
woot6768 Messages postés 393 Date d'inscription mercredi 8 mars 2006 Statut Membre Dernière intervention 23 mars 2007
14 juin 2006 à 15:43
Salut,
Euh comment dire...
Simplement...
Peu être illisible?
Oui ça me paraît bien comme mot.

_________________________________________________________________________
Woot
Alias Wouter Tjon.
0
woot6768 Messages postés 393 Date d'inscription mercredi 8 mars 2006 Statut Membre Dernière intervention 23 mars 2007
14 juin 2006 à 15:49
Si tu veu que quelqu'un te réponde, il va faloir que tu remette ton message en forme je pense;)
Parce-que perso j'ai même pas envie de lire ton morceau de code.
+

_________________________________________________________________________
Woot
Alias Wouter Tjon.
0
Rejoignez-nous