0

我需要一些帮助。我有一个使用 C# TCPClient 的简单服务器客户端应用程序

我遇到的问题是,当客户端向服务器发送消息时,服务器返回一个包含数字的 4 字节响应。

但是,每 3 或 4 个响应,字节都在同一个错误的位置。

例如:

服务器响应带有一个包含整数 243 的字节数组:

byte[0] => 243 byte[1] => 0 byte[2] => 0 byte[3] => 0

客户端接收到的 4 个字节如下:

byte[0] => 0 byte[1] => 0 byte[2] => 243 byte[3] => 0

这是一个整数 15925248 而不是 243。

这是服务器代码的片段。当客户端发送消息时执行代码:

byte[4] resp = new byte[4];
Buffer.BlockCopy(BitConverter.GetBytes(243), 0, resp, 0, 4);
clientStream.Write(resp, 0, resp.Length);
clientStream.Flush();

这是要接收的客户端代码片段:

Byte[] rec = new Byte[4] {0xx0, 0x00, 0x00, 0x00};
if (netStream.CanRead)
{
int numberOfBytesRead = 0;
do
{
numberOfBytesRead = netStream.Read(rec, 0, rec.Length);
} while (netStream.DataAvailable);
}

我已经完成了以下操作: - 验证服务器确实正确发送了字节数组。

我不知道我在这里做错了什么。或者我的代码中是否存在错误。

4

1 回答 1

1

您检索 ,numberOfBytesRead但您不检查它是否实际接收到所有四个字节。例如,如果第一个接收到的数据是 3 个字节,则下一个字节将从Read流中连续读取,“移动”数据。

您可以通过将代码更改为以下内容来解决此问题:

byte[] rec = new byte[4];
int index = 0;
int remainingBytes = rec.Length;
while (remainingBytes > 0)
{
    int read = netStream.Read(rec, index, remainingBytes);
    if (read == 0) return DisconnectedBeforeReceiving4Bytes();
    remainingBytes -= read;
    index += read;
}
于 2013-09-16T07:37:06.907 回答