gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:33:58 26 4
gpt4 key购买 nike

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 使您免受此影响。

关于c# - 如何确保接收到整个数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31087306/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com