Не могу перестать думать об этом, потому что это кажется таким странным.Однако у меня есть объяснение, поэтому я попытаюсь ответить:
У вас есть два клиентских соединения, достигающих сервера.Соединение 1 подключается и ничего не отправляет (причина неизвестна).Соединение 2 подключается и отправляет данные полезной нагрузки.Однако сервер даже не пытается прочитать эту полезную нагрузку, потому что он покорно ждет, пока соединение 1 не отправит что-то (чего он никогда не делает).Второй сокет никогда даже не является accept()
-ed.
Естественно, когда вы проверяете сервер с помощью отладчика, вы видите, что он ждет на readLine()
.Ваша ошибка заключалась в том, что readLine()
было связано с соединением 2.
Кстати, этот джайв с .pcap;даже если клиентское соединение не accept()
, оно все равно получает ACK и может бесплатно отправлять дополнительные данные на сервер.Такие данные также будут ACK'd.Ведь ОС сервера находится в получении данных;ваша серверная программа просто еще не просила об этом.
Существует множество причин, по которым это может сработать, когда вы выполняете тест localhost;скорее всего, это связано со временем.