TCPClient не читает входящие данные - PullRequest
0 голосов
/ 30 мая 2011

Я работаю над приложением C #, которое подключается к хосту через TCP / IP для отправки, а затем получает ответ, используя TCPClient Stream.

Проблема в том, что я могу отправлять данные с помощью Stream.Write (...), но когда я пытаюсь получить ответ на мои отправленные данные, вызывая Stream.Read (...), он зависает и никогда не возвращается.

Я проверил инструмент сетевого анализа, такой как Wire-Shark, и вижу, что данные с хоста принимаются моим сетевым интерфейсом. Почему эти данные не читаются моим TCPClient?

Шестнадцатеричный дамп полученных данных, отображаемый WireShark, начинается с 00, означает ли он символ Null, создавая проблему для чтения TCPClient?

00-1d-4f-фб-43-4b-00-1d-7e-3а-9а-20-08-00-45-00-00-34

Вот код для написания ...

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);

и это код для чтения ...

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

Спасибо за помощь.

1 Ответ

0 голосов
/ 31 мая 2011

Это может быть проблема синхронизации, но трудно сказать, не увидев ваш код (вы запускаете код чтения сразу после отправки пакета? Он находится в том же потоке?)

Еще одна мысль: попробуйте установить для свойства NoDelay значение true. Это заставляет стек TCP передавать данные в ваше приложение немедленно, а не ожидать полного буфера (отключение алгоритма Nagle ). Это полезно для уменьшения задержки при отправке и получении небольших пакетов данных.

...