Bonjour,
Je rencontre un souci avec mon application. Un serveur doit recevoir des instructions de clients et leur renvoyer le résultat.
Coté client, le code (j'ai retiré tous les tests pour simplifier):
Coté serveur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Thread threadEnvoiDemande = new Thread(gestionEnvoisDemandes); threadEnvoiDemande.Start(); private void gestionEnvoisDemandes() { while(condition) { //attente d'un évènement NetworkStream stream = _connexionServeur.GetStream(); //_connexionServeur est un TcpClient using (BinaryWriter writer = new BinaryWriter(stream)) { JObject message = miseEnFormeDemande(param); writer.Write(message.ToString()); } } }
Le problème: Coté serveur, la ligne: if (reader.PeekChar() == -1) return; est toujours égale à true, donc le stream semble vide.
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
23
24
25
26
27
28
29
30
31 TcpListener _listener = new TcpListener(IPAddress.Any, 1337); _listener.Start(); Thread threadListener = new Thread(listenForClients); threadListener.Start(); private void listenForClients() { while (!_conditionArret) { //TODO: event wait if (_listener.Pending()) { //Si des connexions sont en attente _listener.BeginAcceptTcpClient(connexionAcceptee, _listener); } } } private void connexionAcceptee(IAsyncResult result) { TcpClient client = _listener.EndAcceptTcpClient(result); //initialisation du thread attendant les connexions clientes Thread threadClient = new Thread(() => gestionConnexionClient(client)); threadClient.Start(); } private void gestionConnexionClient(TcpClient client) { NetworkStream stream = client.GetStream(); BinaryReader reader = new BinaryReader(stream); if (reader.PeekChar() == -1) return; //toujours égal à -1 }
Précisions:
- j'utilise le même stream coté client et serveur. Je me connecte au serveur depuis le client, créé un stream et récupère le stream coté serveur avec le TcpClient.GetStream().
- j'utilise le même port coté client et serveur
- je teste en local pour le moment, 127.0.0.1:1337 en adresse de connexion au serveur
N'hésitez pas à me demander des précisions.
Merci
Partager