[tcp]Gestion de la deconnexion

Résolu
cs_Sobieski Messages postés 54 Date d'inscription mardi 22 mars 2005 Statut Membre Dernière intervention 13 mars 2007 - 4 juil. 2005 à 16:44
cs_Sobieski Messages postés 54 Date d'inscription mardi 22 mars 2005 Statut Membre 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 !

4 réponses

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
4 juil. 2005 à 16:54
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
3
cs_Sobieski Messages postés 54 Date d'inscription mardi 22 mars 2005 Statut Membre Dernière intervention 13 mars 2007
5 juil. 2005 à 07:58
La feinte c'est que je fais du TCP avec TCPClient, il faut que je regarde si y'a un truc poll dessus aussi.
0
cs_Sobieski Messages postés 54 Date d'inscription mardi 22 mars 2005 Statut Membre Dernière intervention 13 mars 2007
5 juil. 2005 à 10:20
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 !
0
cs_Sobieski Messages postés 54 Date d'inscription mardi 22 mars 2005 Statut Membre Dernière intervention 13 mars 2007
5 juil. 2005 à 10:53
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);
}
}
}
0
Rejoignez-nous