TCPClient - 发送和接收重叠

时间:2013-09-30 01:21:13

标签: c# tcpclient

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

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

我能做些什么让客户知道哪种方法响应哪种方法?

由于

1 个答案:

答案 0 :(得分:2)

你需要:

  1. 阅读所有内容的单个帖子。
  2. 每封邮件正面的标识符:REQUEST或PING。
  3. 读取线程读取一个字节,决定它是什么,读取需要的字节数,然后响应。