【问题标题】:Unity TCP server/clientUnity TCP 服务器/客户端
【发布时间】:2014-02-27 08:46:47
【问题描述】:

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

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

【问题讨论】:

    标签: c# tcp unity3d


    【解决方案1】:

    问题在于这两行:

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

    注意你是如何执行ClientList[x].Send(dataByte) 两次的?这就是为什么你在接收端得到 2 次。只需删除两行之一,就可以了。

    【讨论】:

    • 天哪!我多么愚蠢。非常感谢您指出这一点。
    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 2013-08-20
    • 2012-01-04
    • 2013-02-17
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多