我正在使用 C# 和 XNA 开发一个小型在线多人乒乓球游戏。
我使用套接字在我的个人 LAN 上的两台计算机之间传输数据。它工作正常。
问题在于速度:传输速度很慢。
当我 ping 第二台计算机时,它显示 2 毫秒的延迟。我在我的代码中设置了一个小计时器,它显示大约 200 毫秒的延迟。即使服务器和客户端在同一台计算机上(使用 127.0.0.1),延迟仍然在 15 毫秒左右。我认为这很慢。
这是我的代码的一些片段:
server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
server.Bind(new IPEndPoint(IPAddress.Any, port));
server.Listen(1);
// Begin Accept
server.BeginAccept(new AsyncCallback(ClientAccepted), null);
在 ClientAccepted 中,我设置了一个 NetworkStream、一个 StreamReader 和一个 StreamWriter。当我想更新玩家的位置时,这就是我发送消息的方式:
string message = "P" + "\n" + player.Position + "\n";
byte[] data = Encoding.ASCII.GetBytes(message);
ns.BeginWrite(data, 0, data.Length, new AsyncCallback(EndUpdate), null);
EndUpdate 唯一要做的就是调用 EndWrite。这就是我接收数据的方式:
message = sr.ReadLine();
它不会阻止我的游戏,因为它在第二个线程上。
这些是我尝试过的东西: - 使用 IP 而不是 TCP - 使用二进制消息而不是文本 - 使用 IPv6 而不是 IPv4 没有任何帮助。
关于如何改善延迟的任何想法?
谢谢