C# C(Unity)套接字接收数据覆盖?
演示 如果将BroadcastClient.cs中的SendMsg更改为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
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);
}
}