如何确保接收到整个数据包

How to ensure the whole packet is received

public void read(byte[] bytess)
{
        int davar = this.clientSocket.Receive(bytess);
        MemoryStream m = new MemoryStream(bytess);
        BinaryFormatter b = new BinaryFormatter();

        m.Position = 0;
        SPacket information = b.Deserialize(m) as SPacket;

        Image imageScreenShot = information.ScreenShot;

        if (information.Premissionize)
            Premitted = true;

        if (information.Text != "")
        {
            cE.GetMessageFromServer(information.Text);
        }

        if (imageScreenShot == null)
            return;

        Bitmap screenShot = new Bitmap(imageScreenShot);

        cE.UpdatePhoto(screenShot);

        //screenShot.Dispose();
        //Form1.t.Text = forText;
}

我在客户端中有这个读取功能,当我运行它在 2 台局域网计算机之间联机时抛出反序列化异常。

我猜有些东西延迟了所有数据包并且只有一部分已经到达。它说二进制 header 无效。

如何在 C# 中确保我得到了整个数据包?

顺便说一句,这是 TCP

Receive 函数至少读取一个字节,最多读取与已发送的字节一样多的字节。现在您假设一次读取将读取所有内容,但事实并非如此。

new NetworkStream(socket) 反序列化。这允许 BinaryFormatter 从套接字中提取字节。

你在那里写的关于数据包被延迟的内容是不准确的。 TCP 使您免受此影响。