2014-02-27 289 views
1

我很抱歉,但我有點這裏有一個令人困惑的問題......團結TCP服務器/客戶端

我最近使用Unity,並設法使可以通過它的所有客戶端廣播一個簡單的TCP服務器,對於自己來說,服務器本身就是客戶端之一,比如聊天室或其他東西。

所以我也成功地這樣做了,但問題是,所有的客戶端接收的數據實際上是初始數據從客戶端發送兩次,下面是我的代碼示例

 public void broadcast(string data) 
     { 
      print("Broadcast"); 
      byte[] dataByte = Encoding.ASCII.GetBytes(data); 
      print(ClientList.Count); 
      for(int x = 0; x<ClientList.Count;x++) 
      { 
       ClientList[x].Send(dataByte); 
       print ("something" +ClientList[x].Send(dataByte)); 
       print ("loop"); 
      } 
     } 

和這是客戶端將如何接受它

private void ReceiveData(IAsyncResult ar) 
    { 
     print ("ReceiveData Client"); 
     Socket handler = (Socket)ar.AsyncState; 
     try 
     { 
      int x = handler.EndReceive(ar); 
      print("Receiving Data..."); 
      print (x); 
      if (x > 0) 
      { 
       StringBuilder sb = new StringBuilder(); 
       sb.Append(Encoding.ASCII.GetString(buffer, 0, x)); 
       string content = sb.ToString(); 
       print("Data Received: " + content); 
       //string[] data = content.Split(';'); 
       //for (int i = 0; i < data.Length; i++) 
       //{ 
        this.ProcessData(x, content, handler); 
       //} 
       sb.Remove(0, sb.Length); 
       handler.BeginReceive(buffer, 0, 1024, 0, new AsyncCallback(ReceiveData), handler); 
      } 
      else 
      { 
       print("Connection Closed..."); 
      } 
     } 
     catch (Exception e) 
     { 
      print(e.Message); 
     } 
    } 

我嘗試發送test;this is client ,結果低於

Broadcast 
1 
something20 
ReceiveData Client 
loop 
Receiving data... 
40 
Data Received: test;this is client test; this is client" 

我不知道這是怎麼出錯,任何幫助將不勝感激。由於B4

回答

2

的問題是這兩條線中:

ClientList[x].Send(dataByte); 
print ("something" +ClientList[x].Send(dataByte)); 

注意如何執行過兩次ClientList[x].Send(dataByte)?這就是爲什麼你在接收端獲得2次。只要刪除兩條線中的一條,你應該沒問題。

+0

天啊!我多麼愚蠢。非常感謝你指出了這一點。 – Diom