Несмотря на то, что клиент записал данные в сетевой поток, он не доступен на сервере. Почему - PullRequest
1 голос
/ 01 февраля 2011

кодирование на стороне клиента

TcpClient tcpclnt = new TcpClient("192.157.1.1", 8001);
Stream stm = tcpclnt.GetStream();
byte[] bites = new byte[dataLength];
    // assigning values for bites
stm.Write(clientdata, 0, clientdata.Length);

кодирование на стороне сервера

 TcpListener listener = new TcpListener(IPAddress.Any, 8001);
 listener.Start(10);
 Socket soc = listener.AcceptSocket();
 byte[] bites = new byte[1000];
 int avail = soc.Available;
 int receivedBytesLen = soc.Receive(bites);

После записи данных клиента в потоке и в серверной сетиДоступно ноль.Таким образом, сервер не может прочитать данные.В чем проблема?

Ответы [ 3 ]

2 голосов
/ 01 февраля 2011

Данные буферизуются.Клиент должен написать больше.Или закройте поток.

2 голосов
/ 19 декабря 2011

NetworkStream.Flush () на самом деле не реализовано «еще» в .net 4.0 согласно msdn:

Сбрасывает данные из потока. Этот метод зарезервирован для использования в будущем.

Возможно, ваша проблема вызвана алгоритмом nagle , предотвращающим отправку небольших объемов данных для уменьшения перегрузки. Вы можете попробовать отключить его, установив следующие свойства для вашего объекта tcpClient:

tcpClient.NoDelay = true;
tcpClient.Client.NoDelay = true;

Также проверьте networkComms.net , который является готовым решением, если у вас возникли проблемы.

0 голосов
/ 01 февраля 2011

после stm.Write(...) добавить вызов stm.Flush(), чтобы данные были сброшены в сеть.

...