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台计算机之间在线运行时,会抛出反序列化异常。
我猜这个延迟了所有数据包的东西,只有部分数据包到了。它说二进制标头无效。
如何在C#中确保我收到了整个数据包?
顺便说一下,这是 TCP
答案 0 :(得分:3)
接收功能至少读取一个字节,最多读取已发送的字节数。现在你假设一个读取将读取所有不是这种情况。
从new NetworkStream(socket)
反序列化。这允许BinaryFormatter
从套接字中提取字节。
你在那里写的关于数据包被延迟的内容并不准确。 TCP可以保护你。