Unity TCP服务器/客户端

时间:2014-02-27 08:46:48

标签: c# tcp unity3d

对不起,我在这里遇到一个令人困惑的问题......

我最近使用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

1 个答案:

答案 0 :(得分:2)

问题在于以下两个方面:

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

注意你是如何执行ClientList[x].Send(dataByte)两次的?这就是你在接收端获得2次的原因。只需删除两条线中的一条就可以了。