Sytuacja wygląda następująco: Mam aplikację Java, która komunikuje się przez TCP z mikrokontrolerem z stosem TCP. Stos na kontrolerze działa dobrze, mogę to rozwiązać.Java Sockets: Socket.close() kończy się inaczej w systemach Windows i Mac?
Problem: Kiedy kończę połączenie ze sterownikiem, po prostu używam socket.close()
, a połączenie jest zakończone, bez problemu. Na moim Macu też to działa, ale kiedy sprawdzam Wiresharka, następuje regularny proces kończenia połączenia: [FIN,ACK]
- [ACK]
, ale po nim następuje pakiet [TCP Dup ACK]
, który, jak twierdzi Wireshark, należy do mojego pakietu [FIN,ACK]
. Dzieje się tak tylko na komputerze Mac i nie występuje na komputerze z systemem Windows w maszynie wirtualnej na moim komputerze Mac lub na moim netbooku ...
Czy są jakieś poprawki, których mogę użyć, aby nie przekazać tego pakietu Dup-ACK do przesłania? W rzeczywistości podciąga stos w kontrolerze, twierdząc, że zamknięta sesja jest nadal aktywna i po 10-krotnym podłączeniu do kontrolera, stos nie ma więcej miejsca, aby zaakceptować nowe połączenia.
Byłbym bardzo wdzięczny, gdyby ktoś mógł dać mi wskazówkę!
Która wersja Mac OS? – Daniel
Mac OS 10.6.6, Java wersja 1.6.0_22 –