2014-02-27 214 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