Thufenn
Messages postés14Date d'inscriptionvendredi 24 octobre 2003StatutMembreDernière intervention15 juin 2006
-
14 juin 2006 à 15:38
Thufenn
Messages postés14Date d'inscriptionvendredi 24 octobre 2003StatutMembreDernière intervention15 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());
}
}
cs_fcolo
Messages postés201Date d'inscriptionmercredi 8 février 2006StatutMembreDernière intervention20 février 20072 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 ...
Thufenn
Messages postés14Date d'inscriptionvendredi 24 octobre 2003StatutMembreDernière intervention15 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)
Thufenn
Messages postés14Date d'inscriptionvendredi 24 octobre 2003StatutMembreDernière intervention15 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
woot6768
Messages postés393Date d'inscriptionmercredi 8 mars 2006StatutMembreDernière intervention23 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.