C#TCP / IP服务器未收到所有正在发送的数据包

时间:2019-05-20 12:24:41

标签: c# unity3d networking

我目前正在研究简单的 2D等距多人RPG

我有几个客户端和一个主服务器,它们仅通过TCP/IP Socket连接来接收和发送数据。

现在我偶然发现了一个问题:

  • 我每秒发送一次PlayerMovement更新,大约30次,每个信息包都被接收并分发
  • 我的球员也可以投篮,但是当我移动并投篮时,将会收到移动,但是并不是每个射门命令都会收到。

如果有人需要代码片段,我可以上传它们!

我希望有人可以帮助我:)

我已经将写入器缓冲区大小设置为512,将接收器缓冲区大小设置为4096。

服务器:

foreach (ServerClient sc in clients)
        {
            // Is the client still connected?
            if (!IsConnected(sc.tcp))
            {
                sc.tcp.Close();
                disconnectList.Add(sc);
                continue;
            }
            else
            {
                NetworkStream s = sc.tcp.GetStream();
                if (s.DataAvailable)
                {
                    StreamReader reader = new StreamReader(s, System.Text.Encoding.Default, true, 8192);
                    Task<string> dataTask = reader.ReadLineAsync();

                    sc.tasks.Add(dataTask);
                }

                sc.RunTasks(this);
            }
        }

->服务器RunTasks方法:

public void RunTasks(MasterServer server)
    {
        if(tasks.Count > 0)
        {
            if (tasks[0] != null && tasks[0].IsCompleted)
            {
                string data = tasks[0].Result;

                if (data != null)
                    server.OnIncomingData(this, data);

                tasks[0].Dispose();
                tasks.RemoveAt(0);
            }
        }
    }

客户

    // Sending messaged to the server
    public void Send(string data)
    {
        if (!socketReady)
            return;

        writer.WriteLine(data);
        writer.Flush();
    }

0 个答案:

没有答案