【发布时间】:2018-08-17 11:44:33
【问题描述】:
我通过 TCP 从 .NET 应用程序向 Unity 发送数据,但未收到所有字节。使用相同代码的简单 .NET wpf 应用程序就是这种情况。为什么Unity有区别?两者都基于 .NET 4.7?
// Data send from .NET application:
byte[] ba = memoryStream.ToArray();
var buffer = BitConverter.GetBytes(ba.Length);
stm.Write(buffer, 0, buffer.Length);
stm.Write(ba, 0, ba.Length);
// Data receive works in .NET but in Unity not all bytes are received
Socket s;
byte[] buffersizeinbytes = new byte[32];
TcpListener myList = new TcpListener(ipAd, 8001);
s = myList.AcceptSocket();
(...)
int k = s.Receive(buffersizeinbytes);
int size = BitConverter.ToInt32(lengthb, 0); // size of buffer
byte[] buffer = new byte[size];
int receivedByteCount = s.Receive(buffer);
【问题讨论】:
-
请在您的代码中添加更多上下文,例如,我不知道
s.Receive()中的s是什么。 -
k的值是多少?请记住,不能保证 Receive 一次性接收所有发送的字节。我没有看到您接收部分内容的帐户。
-
receivedByteCount 不等于 buffer.length 的长度(缓冲区大小)。但它在.NET 中。我的问题更多是关于 c# 和统一处理 TCP 之间的区别。
-
如前所述,不能保证调用 Receive 会真正为您获取所有内容。在此之前,您将获得任何可用的东西,最大为您指定的大小。返回的值是您获得了多少内容。如果您知道发送的数据的大小,请调用 Receive 直到您获得所有内容。