簡體   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