Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与java中使用TCP的mac相比,windows上的延迟不好_Java_Sockets_Network Programming_Latency - Fatal编程技术网

与java中使用TCP的mac相比,windows上的延迟不好

与java中使用TCP的mac相比,windows上的延迟不好,java,sockets,network-programming,latency,Java,Sockets,Network Programming,Latency,我正在尝试制作一个多人游戏,但在我开始之前,我一直在尝试让一个简单的类似ping的应用程序工作。由于某些原因,我在Windows上的ping时间非常糟糕(400毫秒左右),而如果我在Mac上尝试,它会好得多(8毫秒左右) 我有我的服务器和客户端。服务器使用serverSock.accept()创建一个Socket客户端sock,其中serverSock是端口12234处的另一个Socket。客户端使用另一个套接字在单独的应用程序中连接到我的外部ip端口12234 我的ping基本上只是将客户端上

我正在尝试制作一个多人游戏,但在我开始之前,我一直在尝试让一个简单的类似ping的应用程序工作。由于某些原因,我在Windows上的ping时间非常糟糕(400毫秒左右),而如果我在Mac上尝试,它会好得多(8毫秒左右)

我有我的服务器和客户端。服务器使用
serverSock.accept()
创建一个
Socket客户端sock
,其中
serverSock
是端口12234处的另一个
Socket
。客户端使用另一个
套接字
在单独的应用程序中连接到我的外部ip端口12234

我的ping基本上只是将客户端上当前系统时间的消息发送到服务器,服务器将其发送回服务器,客户端从接收回的时间中减去新的当前时间并打印出来

Java在我试用过的所有计算机上都是最新的(3台windows计算机、2台Mac和一台windows虚拟机)

奇怪的是,Windows虚拟机得到的ping与Mac机相同,为8或9毫秒,而独立Windows机器的ping范围为400毫秒

另一个奇怪的怪癖是,如果我ping得更快,Windows上的ping时间将减少到200毫秒左右

另外,当我在命令行/终端上ping我的外部地址时,windows和mac都大约为1ms

如有任何建议或想法,将不胜感激


提前谢谢

问题已经解决了

事实证明,Windows使用Nagle算法来节省带宽。然而,该算法在实际发送数据包之前设置了200ms缓冲时间

Windows上ping时间缓慢的原因就是这个原因。约400ms的时间是从客户端传出200ms,然后从服务器返回到客户端传出200ms

所有这些问题都可以通过在两端的套接字上调用
setTcpNoDelay()
来解决


Windows和OSX机器是否在同一网络上?Windows系统是否运行某种防火墙?在网络相关的系统之间还有什么不同之处吗?另外,在Windows和OSX上计算延迟的方法是相同的?所有机器都在同一个网络上。我相当肯定Windows机器有防火墙,只是因为它们默认有防火墙,对吗?我不知道windows和mac有什么不同。你能想出其他的诊断工具来测试类似的东西吗?假定java时钟在两个系统上都能工作,那么延迟也是以同样的方式计算的。@JoachimPileborg谢谢你的帮助。我现在明白了。对于高吞吐量和低延迟的游戏,几乎都使用UDP进行与游戏相关的通信。TCP用于聊天等非关键内容,或用于必须交付但没有延迟限制的内容。