[tcp]Gestion de la deconnexion [Résolu]

Messages postés
54
Date d'inscription
mardi 22 mars 2005
Dernière intervention
13 mars 2007
- - Dernière réponse : cs_Sobieski
Messages postés
54
Date d'inscription
mardi 22 mars 2005
Dernière intervention
13 mars 2007
- 5 juil. 2005 à 10:53
Voila, j'ai un serveur TCP auquel vient se connecter un client (marrant non ?)
J'aimerais quand je ferme le client que le serveur se remette en écoute (sachant que le serveur est du genre a envoyer des informations dans une boucle while(true)).

Comment réussir ceci ?

Merci d'avance !
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
3489
Date d'inscription
lundi 16 octobre 2000
Dernière intervention
30 octobre 2008
44
3
Merci
Lance un Thread dans lequel tu fais :



if (tonSocket.Poll(20, SelectedMode.SelectedRead) && tonSocket.Available == 0)

// ton client est deconnecté


Si ton client est déco, tu relances ton écoute


Mx

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 117 internautes nous ont dit merci ce mois-ci

Commenter la réponse de MorpionMx
Messages postés
54
Date d'inscription
mardi 22 mars 2005
Dernière intervention
13 mars 2007
0
Merci
La feinte c'est que je fais du TCP avec TCPClient, il faut que je regarde si y'a un truc poll dessus aussi.
Commenter la réponse de cs_Sobieski
Messages postés
54
Date d'inscription
mardi 22 mars 2005
Dernière intervention
13 mars 2007
0
Merci
En fait je pige pas trop comment intégrer la solution.

J'ai une classe genre avec du TCPClient qui en gros est comme ca :

while(true)
{
sendLoc(j);
}
public void sendLoc(Joueur j)
{
int i=1;
serveurStreamWriter.WriteLine(i);
serveurStreamWriter.WriteLine(j.num);
serveurStreamWriter.WriteLine(j.etat);
serveurStreamWriter.WriteLine(j.type);
serveurStreamWriter.WriteLine(j.piece);
serveurStreamWriter.WriteLine(i);
serveurStreamWriter.WriteLine(i);
serveurStreamWriter.WriteLine(i);
serveurStreamWriter.Flush();
}

Si j'ai bien compris je dois lancer avant ma boucle while(true) un thread qui fait le if... mais faut il que je lui passe ma classe d'écoute en parametre et que j'encapsule ma boucle while pour relancer la méthode dans l'autre thread ?

Merci !
Commenter la réponse de cs_Sobieski
Messages postés
54
Date d'inscription
mardi 22 mars 2005
Dernière intervention
13 mars 2007
0
Merci
Je reviens avec la source de mon truc complete :

using System.Net.Sockets;
using System.IO;
using System;
using System.Configuration;
using System.Threading;


namespace cs_cenzub
{
/// <summary>
/// Summary description for ServerIHM.
/// </summary>
public class ServerIHM
{
private StreamWriter serverStreamWriter;
private StreamReader serverStreamReader;
private int port=int.Parse((string)ConfigurationSettings.AppSettings["portIHM"]);
private Joueur _j1, _j2, _j3;


public ServerIHM(ref Joueur j1, ref Joueur j2, ref Joueur j3)
{
_j1=j1;
_j2=j2;
_j3=j3;
}


public void Start()
{
//Création du serveur
TcpListener tcpServerListener = new TcpListener(port);
tcpServerListener.Start(); //start server
Console.WriteLine("Serveur d'ihm lancé");
Socket serverSocket = tcpServerListener.AcceptSocket();


try
{
if (serverSocket.Connected)
{
Console.WriteLine("Client connecté");
//open network stream on accepted socket
NetworkStream serverSockStream =
new NetworkStream(serverSocket);
serverStreamWriter =
new StreamWriter(serverSockStream);
serverStreamReader =
new StreamReader(serverSockStream);
}
}
catch(Exception e)
{
Console.WriteLine(e.StackTrace);
}
// Ici si j'ai bien compris je lance un thread d'écoute, que je mette ma boucle while(true) en méthode, pour la rappeler si la condition du if se dégage ?
while(true)
{
this.SendLoc(this._j1);
this.SendLoc(this._j2);
this.SendLoc(this._j3);
this.serverStreamWriter.Flush();
Thread.Sleep(50);
}
public void SendLoc(Joueur j)
{
serverStreamWriter.WriteLine(j.num);
serverStreamWriter.WriteLine(j.type);
serverStreamWriter.WriteLine(j.etat);
serverStreamWriter.WriteLine(j.piece);
serverStreamWriter.WriteLine(j.WifiX);
serverStreamWriter.WriteLine(j.WifiY);
serverStreamWriter.WriteLine(j.WifiErr);
}
}
}
Commenter la réponse de cs_Sobieski

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.