TCP客户端,损坏的接收数据

时间:2016-05-12 14:30:31

标签: c# sockets tcp tcpclient

我正在编写协议。我的自定义消息由标题和数据部分组成。标头长度不变,并且包含有关数据大小的信息。数据最多可达5 MB,因为它可以包含数据附加文件。当我的服务器收到数据时,我的消息的数据部分有时会损坏。我通过将base64中的接收字节保存到文本文件并将其与发送的字节进行比较来检查它。当base64文本文件表示中的数据损坏时,它通常具有多个区域,其中有许多' A'在utf8中的符号是'�'意思是出了问题。我再次强调它并不总是腐败,它似乎是随机的,有时它更常发生,有时更少,有些部分与发送的字节匹配。可能是什么原因,我错过了什么?

以下是我的代码的一部分(特定数据的allBundleData有时是5mln字节长,如前所述)

客户方:

TcpClient client = client = new TcpClient(transportAddr, transportServicePort);
NetworkStream stream = client.GetStream();

byte[] headerBundleComplete = new byte[59];
byte[] allBundleData;
...
stream.Write(headerBundleComplete, 0, headerBundleComplete.Length);
stream.Write(allBundleData, 0, allBundleData.Length);

服务器端:

TcpClient client = server.AcceptTcpClient();
NetworkStream stream = client.GetStream();

byte[] headerBundle = new byte[59];
stream.Read(headerBundle, 0, 59);
...
byte[] dataBundle = new byte[bundleDataLength];
stream.Read(dataBundle, 0, bundleDataLength);

收到的 dataBundle 有时会损坏。

0 个答案:

没有答案