Java Sockets: Socket.close () разрывает соединение по-разному в Windows и Mac? - PullRequest
5 голосов
/ 09 февраля 2011

Ситуация выглядит следующим образом: У меня есть Java-приложение, которое связывается по TCP с микроконтроллером со стеком TCP на нем. Стек на контроллере работает нормально, я могу разобраться.

Проблема в том, что: когда я прекращаю свое соединение с контроллером, я просто использую socket.close(), и соединение прерывается, нет проблем. На моем Mac это тоже работает, но когда я проверяю Wireshark, происходит обычный процесс завершения [FIN,ACK] - [ACK], за которым следует пакет [TCP Dup ACK], который, как утверждает Wireshark, принадлежит моему [FIN,ACK] Пакет. Это происходит только на Mac и не происходит на компьютере с Windows, на виртуальной машине на моем Mac или на моем нетбуке ...

Могу ли я использовать какие-либо настройки, чтобы запретить передачу этого пакета Dup-ACK? На самом деле, он дергает стек в контроллере, утверждая, что закрытый сеанс все еще активен, и после 10 раз подключения к контроллеру в стеке больше нет места для приема новых соединений.

Я был бы очень благодарен, если бы кто-нибудь дал мне подсказку!

Ответы [ 2 ]

1 голос
/ 11 февраля 2011

Что ж, если это проблема в предоставляемом ОС стеке TCP (что, я думаю, так и есть), вы можете попытаться подключиться через telnet с вашего компьютера Mac и закрыть соединение. Просто чтобы посмотреть, будет ли этот дубликат еще испущен. Если это так, то замена версий / поставщиков Java (например) не принесет много пользы ...

... а, может быть, вы сможете отфильтровать оскорбительный пакет с помощью брандмауэра? Это дикое предположение, поскольку я на самом деле ничего не знаю о брандмауэре для MacOS ...

0 голосов
/ 10 февраля 2011

Я бы порекомендовал поговорить с поставщиком стека tcp / ip вашего MCU.

Хотя вам, возможно, удастся настроить этот конкретный Mac, вам придется исправлять его более надолго.И там достаточно маков, с которыми вам рано или поздно придется иметь дело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...