0

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

我将 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);

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

谢谢

4

1 回答 1

2

你需要:

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

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

于 2013-09-30T01:52:23.557 回答