NetworkStream.Read不接收所有数据

时间:2013-12-29 12:14:54

标签: c# image sockets stream networkstream

我正在使用C#编写用于发送图像的代码 当我从localhost作为IP(同一台PC)写作或阅读时,一切都很完美 但是当我用另一台PC阅读时,我收到了一个错误;图像有时只是图像的四分之一,图像的四分之一,有时候什么都没有

这是阅读代码

byte[] readBytes(int length)
{
    NetworkStream stream = client.GetStream();
    byte[] bytes = new byte[length];
    int recv=  stream.Read(bytes, 0, length);
    while (recv < length)
    {
        length -= recv;
        recv = stream.Read(bytes, recv, length);
    }
    return bytes;
}

我认为我的while循环不正确。有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:2)

你的while循环不正确。首先,条件是错误的。想象一下,对Read的每次调用只收到一个字节(如果不清楚的话,在一张纸上试一试)。此外,如果它循环多次,Read将写入缓冲区中的错误位置。这就是为什么它适用于localhost:连接几乎是即时的,第一个Read接收到所有内容。