演示
https://github.com/mingchaoyan/chat
如果您将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");
}
是的,只需一次发送多个消息,而不是像以前一样发送一个消息。
然后你会发现OnRevMsg中的Debug.log几乎打印
"88888888"
8次。
我发现套接字发现NetworkManager.packets(这是一个队列)的元素每次收到新的msg时都会更改为新接收的内容!
我是否在从套接字接收数据时出错了?
答案 0 :(得分:0)
我终于找到了这个bug。
NetworkManager.cs,Buffer应该复制到新的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);
}
}
所以我删除了演示。