Я разрабатываю приложение Windows (связь между сервером и клиентом), на котором сервер непрерывно отправляет строковое сообщение клиенту и клиенту, считывая это сообщение через сетевой поток. После прочтения сообщения от клиента сетевого потока очистите сетевой поток, но старое сообщение все еще остается в сетевом потоке. Я думаю, что это происходит из-за непрерывной записи сообщения в сетевом потоке на стороне сервера.NetworkStream.Flush() в C# Программирование сокетов
КОД Клиент:
clientSocket.Connect("192.XXX.X.XX", 8888);
label1.Text = "Client Socket Program - Server Connected ...";
NetworkStream serverStream = clientSocket.GetStream();
string returndata = "";
while ((true))
{
byte[] inStream = new byte[10025];
serverStream.Read(inStream, 0, (int)clientSocket.ReceiveBufferSize);
returndata = System.Text.Encoding.ASCII.GetString(inStream);
serverStream.Flush();
}
Server Side:
TcpListener serverSocket = new TcpListener(8888);
TcpClient clientSocket = default(TcpClient);
NetworkStream networkStream = null;
serverSocket.Start();
clientSocket = serverSocket.AcceptTcpClient();
networkStream = clientSocket.GetStream();
Byte[] sendBytes = Encoding.ASCII.GetBytes(task);
networkStream.Write(sendBytes, 0, sendBytes.Length);
networkStream.Flush();
Пожалуйста, скажите мне, как я могу решить эту проблему?
AFAIR вы не можете очистить TCP от окон. Вы можете только отключить алгоритм nagle, но это полезно только для уменьшения задержки в некоторых сценариях, это не влияет на правильность. Другая проблема заключается в том, что ваш «Flush» на стороне клиента бессмыслен. 'Flush' означает« записывать кэшированные данные на диск (или какой-либо другой более низкий уровень) ». Это не имеет никакого смысла, когда вы только * читаете *, а не * пишете *. – CodesInChaos
Ваша проблема с тем, что вы ожидаете, что 'Write' и 'Read' будут работать с сообщениями '. TCP - это просто длинный поток байтов. Он может комбинировать несколько 'Write' в один 'Read' или разделять' Write' на несколько чтений. Если вы хотите разделить поток на сообщения, вам нужно ввести разделители самостоятельно. См. [Потеря данных TCP IP C#] (http://stackoverflow.com/questions/5528234/data-loss-tcp-ip-c-sharp/5528284#5528284) для соответствующего вопроса. – CodesInChaos
@CodesInChaos: Я новичок в программировании сокетов, я просто хочу очистить сетевой поток, чтобы от клиента я мог прочитать последнее сообщение, отправленное сервером. – BhushanK