NetworkStream.Flush() 在 C# 套接字编程中

本文关键字:套接字 编程 Flush NetworkStream | 更新日期: 2023-09-27 18:30:59

我正在开发一个Windows应用程序(服务器-客户端通信),其中服务器不断向客户端发送字符串消息,客户端通过网络流读取该消息。从网络流客户端读取消息后,刷新网络流,但旧消息仍保留在网络流中。我认为这是由于在服务器端的网络流中不断写入消息而发生的。

法典客户:

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

服务器端 :

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

请告诉我如何解决这个问题?

NetworkStream.Flush() 在 C# 套接字编程中

就像Jaroen已经提到的,一种解决方法可能是在客户端发送sendbyte[0] = task.length;,以便在服务器端你知道会发生什么。然后,您可以只读出最后一条消息中的字节,而无需关心流中之后的其他内容。也可能有助于清除您的"内流"字节数组:Array.Clear(instream, startIndex, endIndex);