TCPClient - 发送和接收重叠

本文关键字:重叠 TCPClient | 更新日期: 2023-09-27 18:33:12

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

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

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

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

我创建了一个线程,每 10 秒对服务器进行一次 ping 操作。

当用户按下发送按钮时,客户端将发送数据请求。

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

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

这是我遇到的问题。

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

现在,数据请求方法是从套接字读取并期望 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);

我该怎么做才能让客户端知道哪个响应转到哪个方法?

谢谢

TCPClient - 发送和接收重叠

你需要:

  1. 单个线程读取所有内容。
  2. 每条消息前面的标识符:REQUEST 或 PING。
读取

线程读取一个字节,决定它是哪个字节,读取所需的更多字节,然后响应。