繁体   English   中英

Java套接字:Socket.close()在Windows和Mac上终止不同的连接?

[英]Java Sockets: Socket.close() terminates connection different on Windows and Mac?

情况如下:我有一个Java应用程序,它通过TCP与具有TCP堆栈的微控制器通信。 控制器上的堆栈工作正常,我可以解决这个问题。

问题是:当我终止与Controller的连接时,我只是使用socket.close()并且连接终止,没问题。 在我的Mac上,这也有效,但是当我检查Wireshark时,有常规终止进程[FIN,ACK] - [ACK] ,但后面跟着一个[TCP Dup ACK]数据包,由Wireshark声称属于我的[FIN,ACK]数据包。 这只发生在Mac上,并且不会发生在我的Mac或我的上网本上的VM上的Windows机器上...

我是否可以使用任何调整来不让这个Dup-ACK数据包被传输? 它实际上通过声称关闭的会话仍然处于活动状态并且在连接到控制器10次后,堆栈中没有更多空间来接受新连接,从而使控制器中的堆栈猛然抬起。

如果有人能给我一个暗示,我真的很感激!

好吧,如果这是OS提供的TCP堆栈中的问题(我相信它是),您可以尝试从mac telnet到设备并关闭连接。 只是为了看看是否仍然会发出这个重复的ack。 如果是,比交换java版本/供应商(例如)不会做太多好事......

...哦,也许你能用防火墙过滤有问题的数据包? 这是一个疯狂的猜测,因为我实际上对MacOS的防火墙一无所知......

我实际上建议您与MCU的tcp / ip堆栈的供应商交谈。

虽然您可能能够调整这个特定的mac,但您必须更加永久地修复此问题。 那里有足够的mac,你将不得不早晚处理它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM