2011-05-30 6 views
0

Je travaille sur une application C# qui se connecte à l'hôte via TCP/IP pour envoyer puis recevoir la réponse en utilisant TCPClient Stream.TCPClient ne pas lire les données entrantes

Le problème est que je peux envoyer des données en utilisant le Stream.Write (...) mais quand j'essaie d'obtenir la réponse contre mes données envoyées en appelant Stream.Read (...), il se bloque et ne revient jamais.

J'ai vérifié l'outil de reniflage de réseau comme Wire-Shark et je peux voir que les données de l'hôte sont reçues par mon interface réseau. Pourquoi ces données ne sont pas lues par mon TCPClient?

La copie hexadécimale des données reçues affichée par WireShark commence par 00, cela signifie-t-il un caractère Null, ce qui crée un problème de lecture de TCPClient?

00-1d-4F-fb-43-4b-00-1d-3a 7E-9a-20-08-00-45-00-00-34

Voici le code pour écrire .. .

myTcpClient = new TcpClient(); 
myTcpClient.Connect("192.168.0.194", 1958); 
Stream myTCPStream = myTcpClient.GetStream(); 
ASCIIEncoding asen = new ASCIIEncoding(); 
byte[] msgBytes = asen.GetBytes("Message to be sent."); 
myTCPStream.Write(msgBytes, 0, msgBytes.Length); 

et qui est le code pour la lecture ...

byte[] bytesReceived = new byte[100]; 
int nBytesRead = myTCPStream.Read(bytesReceived, 0, bytesReceived.Length); 
myTcpClient.Close(); 

Merci pour l'aide.

+0

Ma boule crytal magique doit encore être réparée, donc je crains que vous ayez à nous montrer le code entre temps ... – DarkSquirrel42

Répondre

0

Cela pourrait être un problème de synchronisation, mais il est difficile de dire sans voir votre code

Une autre pensée (vous exécutez le code lu directement après avoir envoyé le paquet est sur le même fil?): Essayez de définir la propriété NoDelay sur true. Cela indique à la pile TCP de transmettre immédiatement les données à votre application plutôt que d'attendre un tampon complet (désactivation du Nagle algorithm). Ceci est utile pour réduire la latence lors de l'envoi de & réception de petits paquets de données.

+0

oui, je lis juste après avoir envoyé le même fil. Les données capturées par wireshark sont de 54 octets, en commençant par 0x00. Est-ce une sorte de Ack ??? – thriller

+0

Les données seront tout ce qui est renvoyé depuis votre application serveur lors de la réception d'une nouvelle connexion - cela ressemble à un protocole binaire quelconque. Il peut être utile d'afficher votre journal Wireshark – rupello

Questions connexes