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

cs_Sobieski 54 Messages postés mardi 22 mars 2005Date d'inscription 13 mars 2007 Dernière intervention - 4 juil. 2005 à 16:44 - Dernière réponse : cs_Sobieski 54 Messages postés mardi 22 mars 2005Date d'inscription 13 mars 2007 Dernière intervention
- 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
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 4 juil. 2005 à 16:54
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

Merci MorpionMx 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de MorpionMx
cs_Sobieski 54 Messages postés mardi 22 mars 2005Date d'inscription 13 mars 2007 Dernière intervention - 5 juil. 2005 à 07:58
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
cs_Sobieski 54 Messages postés mardi 22 mars 2005Date d'inscription 13 mars 2007 Dernière intervention - 5 juil. 2005 à 10:20
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
cs_Sobieski 54 Messages postés mardi 22 mars 2005Date d'inscription 13 mars 2007 Dernière intervention - 5 juil. 2005 à 10:53
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.