Problème d'envoi/réception de string en situation client/serveur avec TcpClient
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):
Code:
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());
}
}
} |
Coté serveur:
Code:
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
} |
Le problème: Coté serveur, la ligne: if (reader.PeekChar() == -1) return; est toujours égale à true, donc le stream semble vide.
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