2015-09-29 20 views
0

演示C#(Unity)套接字接收數據覆蓋?

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"); 

} 

僅僅是一次發送多個短信息,不發送一個像以前一樣得到1個。

這時你會發現在的debug.log幾乎OnRevMsg打印

"88888888" 

8倍。

我打開了套接字,發現NetworkManager.packets(它是一個隊列)的元素在每次接收到新的msg時都會更改爲新接收的!

從套接字接收數據我有一些錯誤嗎?

+0

BeginWrite是否存在匹配的EndWrite? –

+0

@RonBeyer不,我認爲這就夠了 – mingchaoyan

回答

0

最後我發現了這個bug。

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); 
     } 
    } 

所以我刪除了演示。