【发布时间】:2016-11-12 00:49:48
【问题描述】:
我正在尝试制作具有多人游戏方面的游戏,但在我深入研究之前,我一直在尝试让一个简单的类似 ping 的应用程序工作。出于某种原因,我在 Windows 上的 ping 时间非常糟糕(400 毫秒左右),而如果我在 Mac 上尝试,它会好很多(8 毫秒左右)。
我有我的服务器和我的客户端。服务器使用serverSock.accept() 创建一个Socket clientSock,其中serverSock 是另一个Socket 在端口12234。客户端使用另一个Socket 在单独的应用程序中连接到我的外部IP 端口12234。
我的 ping 基本上只是将我客户端上当前系统时间的消息发送到服务器,然后服务器将其立即发送回来,客户端从它收到的返回的时间中减去新的当前时间并将其打印出来。
Java 在我试用过的所有计算机上都是最新的(3 台 Windows 计算机、2 台 Mac 和一个 Windows 虚拟机)。
奇怪的是,Windows VM 得到了与 mac 相同的 8 或 9 毫秒 ping,而独立的 Windows 机器在 400 毫秒范围内。
另一个奇怪的怪癖是,如果我 ping 更快,在 Windows 上 ping 时间会减少到 200 毫秒左右。
此外,当我在命令行/终端上 ping 我的外部地址时,windows 和 mac 大约需要 1 毫秒。
任何建议或想法将不胜感激!
提前致谢!
【问题讨论】:
-
Windows 和 OSX 机器是否在同一个网络上? Windows 系统是否运行某种防火墙?与网络相关的系统之间还有什么不同的地方吗?此外,您在 Windows 和 OSX 上计算延迟的方式是否相同?
-
所有机器都在同一个网络上。我相当肯定 Windows 机器有防火墙,只是因为它们默认有防火墙,对吗?我不确定它从 windows 到 mac 有何不同。你能想到任何其他诊断工具来测试类似的东西吗?
-
延迟以同样的方式计算,假设java时钟在两个系统上都工作。
-
@JoachimPileborg 感谢您的帮助。我现在想通了。
标签: java sockets network-programming latency