2011-02-09 36 views
5

情況如下: 我有一個Java應用程序,它通過TCP與TCP控制器上的TCP堆棧進行通信。控制器上的堆棧工作正常,我可以將其解決。Java套接字:Socket.close()在Windows和Mac上終止不同的連接?

問題是:當我終止與控制器的連接時,我只需使用socket.close()並且連接終止,沒有問題。在我的Mac上,這也適用,但是當我檢查Wireshark時,有正常的終止過程[FIN,ACK]-[ACK],但後面跟着一個[TCP Dup ACK]數據包,Wireshark聲稱屬於我的[FIN,ACK]數據包。這隻發生在Mac上,並沒有發生在我的Mac或我的上網本上的虛擬機上的Windows機器上...

有沒有我可以用來不讓這個Dup-ACK數據包被傳輸的任何調整?實際上,它通過聲稱關閉的會話仍處於活動狀態並在連接到控制器10次後,堆棧沒有更多的空間來接受新的連接,從而在控制器中猛拉堆棧。

如果有人能給我一個提示,我會非常感激!

+0

哪個Mac OS版本? – Daniel 2011-02-09 12:36:04

+0

Mac OS 10.6.6,Java版本1.6.0_22 – 2011-02-09 13:05:13

回答

0

我實際上建議與MCU的tcp/ip堆棧的供應商交談。

雖然你可能能夠調整這個特定的mac,但你將不得不永久地修復這個問題。而且那裏有足夠多的Mac,你將不得不早或晚地處理它。

1

好吧,如果這是操作系統提供的TCP協議棧中的一個問題(我相信是這樣),您可以嘗試從您的mac遠程登錄到設備並關閉連接。只是爲了看看這種重複確認是否還會發出。如果是,比交換Java版本/供應商(例如)將不會有太大的好處...

......哦,也許你會能夠用你的防火牆過濾違規的數據包?這是一個瘋狂的猜測,因爲我其實對MacOS的防火牆一無所知......