通过List<byte[]>()
以下代码迭代然而问题是,由于某些原因,有时lengthBuffer是byteData的不同的大小。GetBytes会比数据返回不同大小实际上字节是
您可以在我打印BitConverter.ToInt32()
长度,然后实际byteDataList[i].Length
,这两个数字应该是完全一样的,有很多他们的时间DebugPrintInGame方法看,但原因不明给我很多的现在他们都没有。
与它下面这段代码发送数据的长度到服务器,因此服务器知道输入数据的大小,会发生什么,然后将其发送的实际数据。但是有时例如,它会发送长度比实际发送的数据大,但它发生随机,害得我也许认为这是一个线程问题 - 然而byteDataList是这样一个线程中仅使用,因此它没有意义对我来说,甚至可以锁定它。在我测试过的数据中,我发送的数据不超过2kb到17kb。
有谁看到为什么这可能是基于从我的项目这个小snipit发生? 此代码全部为客户端。 注意BitConverter.ToInt32(lengthBuffer, 0)
和byteDataList[i].Length
有望给相同的长度,但事实并非如此。那就是问题所在。从客户端
List<byte[]> byteDataList = new List<byte[]>();
//.........
lock (byteDataList) //pointless lock, just used for random testing :\
{
if (byteDataList.Count > 0)
{
for (int i = 0; i < byteDataList.Count; i++)
{
try
{
byte[] lengthBuffer = BitConverter.GetBytes(byteDataList[i].Length);
//quick printout to compare lengths for testing
this.QueueOnMainThread(() =>
{
Tools.DebugPrintInGame("Length buffer " + lengthBuffer.Length +
+ BitConverter.ToInt32(lengthBuffer,0)+ " "+
+ byteDataList[i].Length); //this should be same as BitConverter lengthBuffer
});
//send length
stream.Write(lengthBuffer, 0, lengthBuffer.Length);
//send data
stream.Write(byteDataList[i], 0, byteDataList[i].Length);
stream.Flush();
}
catch (Exception ex)
{
this.QueueOnMainThread(() =>
{
Tools.DebugPrintInGame("Exception " + ex.ToString());
});
}
}
}
}
打印出来之前,它甚至发送到服务器:
通知不同的长度时,最后两个应该是相同的。 也就是说
`lengthBuffer` = 17672
`byteDataList[i]` = 17672
,但有时它会奇怪,靠不住的:
`lengthBuffer` = 17672
`byteDataList[i]` = 2126
两个lengthBuffer和byteDataList [I]应该是相同的。
是,'字节[] Array.Length'会给你的大小以字节数组的字节。 – Euthyphro
是的,然后我发送该数组元素。元素的长度被发送,然后那个实际元素被发送。看看代码,注意[我]? – Euthyphro
为了调试的目的,我认为你应该将字节长度加到数据数组的开始处,因为它的int表示它总是相同的长度,所以你可以在另一端读取并检查它们以确保它不是延迟/网络问题。或者你也看到打印输出中的斑点? – kmcc049