IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[ServeurTCP] - thread d'écoute client


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 31
    Par défaut [ServeurTCP] - thread d'écoute client
    Bonjour,

    J'ai un soucis avec mon code, je suis en train de faire un serveur multiclient en c# et je n'arrive pas a comprendre pourquoi le thread d'écoute du flux me sort que des '0'.

    Voici le bout de code qui m'embête :
    Le code suivante se trouve dans le classe CThreadHandle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    private void Execute ()
    {
    	while (true) //Thread.CurrentThread.IsAlive
    	{
    		TransmittionStat = E_STREAM.E_STREAM_RECEIVE;
    		if (Stream.Read (RxBuffer, 0, RxLenght) == RxLenght)
    		{
    			MessageBox.Show (RxBuffer[0].ToString());
    			ClientData.PreparetoUse (RxBuffer);
    			TransmittionStat = E_STREAM.E_STREAM_READY_TO_FOLLOW;
    		}
    		else
    		{	TransmittionStat = E_STREAM.E_STREAM_DISCONNECTED;	}
    		Thread.Sleep (1);		//	wait in ms
    	}
    }
    Stream est un attribut de ma classe et cette méthode est exécutée dans un thread.

    Pour plus de compréhension, voici le code de ma classe CServer qui accepte et démarre le thread CThreadHandle.Execute() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    private void WaitforConnections ()
    {
    	int connections = 0;
    	CThreadsHandle tempHandler;
    	CNetData data;
    	while (Thread.CurrentThread.IsAlive)
    	{
    		client = Listener.AcceptTcpClient();
    		tempHandler = new CThreadsHandle (client.GetStream());
    		ThreadHandler.Add (tempHandler);
    		data = new CNetData ();
    		ClientData.Add (data);
    		ThreadHandler[connections].Start ();
    		if (connections+1 < MaxStream)
    		{	connections++;	}
    		else
    		{	StopListening ();	}
    		NbrofClient = connections;
    		Thread.Sleep (100);		//	in ms
    	}
    }
    Je voudrais savoir comment je dois faire pour lire les données du flux correctement. J'ai déjà passé du temps à diagnostiqué mon p'blème et je crois qu'il doit se présenter dans le codage de mon thread car lire les données du flux a l'extérieur du thread, p-e dans la méthode d'initialisation, fonctionne correctement.

    Merci pour votre aide et ne m'en voulez pas s'il vous plais, je ne connais pas très bien voir pas du tout les threads...

    A bientôt !

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    tu peux essayer .net remoting ou WCF (surcouches des sockets)

    tu auras surement le meme résultat mais moins de contraintes de codage
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 31
    Par défaut
    Ok, au moins ça me donne une direction de recherche !
    Merci !

    Tout compte fait, je ne crois pas que ce soit ce que je recherche... Sauf erreur de ma part, .net remoting me permet de contrôler un client qui se connecte, hors ici je ne veux que lire un flux transitant sur le réseau.

    Je crois que je conçois mal la programmation threadienne... Je vais revoir les tutos et essayer avec ce que je trouve.

    Merci quand même, et au cas oú, je laisse le post ouvert...

    a bientôt !

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    ah oui, .net remoting est utile quand on code les 2 coté du transfert, quand on code juste un coté, il faut utiliser soit la classe socket soit la classe tcpclient/tcplistener

    pour ces classes il y a des méthodes synchrones (bloquantes, ex: .Read) et des méthodes asynchrones (non bloquantes, avec un callback, ex: .BeginRead) évitant de coder soit meme le multithreading
    j'en sais guère plus malheureusement ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 114
    Par défaut
    Bonjour,

    Serait-il possible d'avoir la classe CThreadHandle dans son intégralité ?

Discussions similaires

  1. lancer une fonction sur un thread en écoute
    Par amo-said dans le forum C
    Réponses: 1
    Dernier message: 11/05/2011, 13h33
  2. 2 threads entre un client et un serveur
    Par baedal dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 02/03/2008, 19h36
  3. Threads avec RMI Client/Serveur
    Par vivitboss dans le forum Concurrence et multi-thread
    Réponses: 1
    Dernier message: 26/09/2007, 03h22
  4. Threads et POE::Component::Client::MSN
    Par malco dans le forum Langage
    Réponses: 0
    Dernier message: 28/11/2006, 17h39
  5. Réponses: 7
    Dernier message: 19/10/2004, 19h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo