代码之家  ›  专栏  ›  技术社区  ›  daniel

TCP IP socket.receive,在.Net应用程序中接收到数据,但不在Unity中

  •  0
  • daniel  · 技术社区  · 6 年前

    我通过TCP将数据从.NET应用程序发送到Unity,但未接收到所有字节。对于具有相同代码的简单.NET wpf应用程序,情况就是这样。为什么团结有区别?两者都基于.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);
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Bart Tomer W    6 年前

    虽然您的代码在一个应用程序中工作(而不是在一个应用程序中工作)似乎令人困惑,但这并不是问题的核心。你似乎在假设,当你发送数据块时,你也会以这种方式接收它们。事实并非如此。

    Receive 会导致你得到一些数据,最多达到你要求的数量,但你可能不会得到全部。返回值将告诉您实际得到了多少。如果你期望更多,你必须打电话 接收

    有各种各样的超载 接收

    所以,并不是因为团结才做了什么奇怪的事情,而是因为幸运地发现,在其他应用程序中,所有的工作都没有问题。