C# TCPClient-发送和接收重叠

C# TCPClient-发送和接收重叠,c#,tcpclient,C#,Tcpclient,我正在开发一个客户机-服务器应用程序 我对服务器和客户端都使用TCPClient 服务器侦听和响应,客户端将发送和接收。来自服务器的每个响应都包含不同的消息长度 客户端有2个请求。一个是ping请求,另一个是发送数据请求 我创建了一个线程,每10秒ping一次服务器 当用户按下发送按钮时,客户机发送数据请求 服务器通过向客户端发送2个字节来响应ping请求 服务器通过发回8个字节来响应数据请求 这就是我遇到的问题 ping线程有时会在用户按下send按钮的同时向服务器发送请求 现在,数据请求方法

我正在开发一个客户机-服务器应用程序

我对服务器和客户端都使用TCPClient

服务器侦听和响应,客户端将发送和接收。来自服务器的每个响应都包含不同的消息长度

客户端有2个请求。一个是ping请求,另一个是发送数据请求

我创建了一个线程,每10秒ping一次服务器

当用户按下发送按钮时,客户机发送数据请求

服务器通过向客户端发送2个字节来响应ping请求

服务器通过发回8个字节来响应数据请求

这就是我遇到的问题

ping线程有时会在用户按下send按钮的同时向服务器发送请求

现在,数据请求方法正在从套接字读取数据,期望8个字节,但只得到2个字节,因此挂起时间很长

以下是数据请求方法的代码段:

byteBuffer = new byte[8];
remainingBytes = byteBuffer.Length;
numberOfBytesRead = netStream.Read(byteBuffer, index, remainingBytes);
以下是ping线程的代码片段:

byteBuffer = new byte[2];
remainingBytes = byteBuffer.Length;
numberOfBytesRead = netStream.Read(byteBuffer, index, remainingBytes);
我该怎么做才能让客户机知道哪个响应指向哪个方法

谢谢

您需要:

  • 一个线程读取所有内容
  • 每个消息前面的标识符:请求或PING
  • 读取线程读取一个字节,决定它是哪个字节,读取所需的更多字节,然后响应