C# C(Unity)套接字接收数据覆盖?

C# C(Unity)套接字接收数据覆盖?,c#,sockets,unity3d,C#,Sockets,Unity3d,演示 如果将BroadcastClient.cs中的SendMsg更改为 void Send1(string inputString1) { Proto.BroadcastProto proto = new Proto.BroadcastProto(); proto.userName = "Client"; proto.stringMsg =inputString1; NetPacket p = new NetPacket(); p.BeginWrite

演示

如果将BroadcastClient.cs中的SendMsg更改为

void Send1(string inputString1) {
    Proto.BroadcastProto proto = new Proto.BroadcastProto();
    proto.userName = "Client";
    proto.stringMsg =inputString1;

    NetPacket p = new NetPacket();
    p.BeginWrite("OnRevMsg");
    p.WriteObject<Proto.BroadcastProto>(proto);
    p.EncodeHeader();

    networkManager.Send(p);
    inputString = "";
}

void SendMsg() {
    Send1 ("1");
    Send1 ("22");
    Send1 ("333");
    Send1 ("4444");
    Send1 ("55555");
    Send1 ("666666");
    Send1 ("7777777");
    Send1 ("88888888");

}
8次

我调试了套接字,找到了NetworkManager.packets的元素,它是一个队列,每次收到新消息时都会更改为新收到的消息


我从套接字接收数据时是否犯了一些错误?

我终于找到了错误

NetworkManager.cs,缓冲区应复制到新的NetPacket以避免卷影复制

public void AddPacket( NetPacket packet ) {
        lock (packets) {
            NetPacket p = new NetPacket();
            packet.bytes.CopyTo(p.bytes,0);
            p.bodyLength = packet.bodyLength;
            packets.Enqueue(p);
        }
    }

因此,我删除了演示。

是否有与开始写入匹配的结束写入?@RonBeyer不,我认为这就足够了
public void AddPacket( NetPacket packet ) {
        lock (packets) {
            NetPacket p = new NetPacket();
            packet.bytes.CopyTo(p.bytes,0);
            p.bodyLength = packet.bodyLength;
            packets.Enqueue(p);
        }
    }