Я переношу клиент-серверное приложение с Linux на Windows, и хотя версия сервера для Linux работает нормально, версия для Windows не подключается через localhost. Пока программа пытается согласовать соединение, я вижу следующее из netstat -a (нерелевантные строки опущены).
Active Connections Proto Local Address Foreign Address State TCP 0.0.0.0:9000 mgibson-dev:0 LISTENING TCP 0.0.0.0:9002 mgibson-dev:0 LISTENING TCP 127.0.0.1:9001 mgibson-dev:0 LISTENING TCP [::1]:52403 mgibson-dev:9001 SYN_SENT TCP [::1]:52404 mgibson-dev:9001 SYN_SENT
Похоже, что сервер пытается ответить по IPv6. Это нормально и должно ли работать? Я смотрю на проблему или просто отвлекаю внимание?
Что ж, сервер не пытался ответить, SYN_SENT было состоянием инициации соединения, поэтому это был клиент. Похоже, что клиенту не удалось ничего получить обратно из mgibson-dev
хост. Ты уверен mgibson-dev
решает 127.0.0.1
? Ваше серверное приложение прослушивает 127.0.0.1
только и вероятно mgibson-dev
разрешается на любой другой адрес, это может быть корнем вашей проблемы.
TCP [::1]:52404 mgibson-dev:9001 SYN_SENT
Эта строка, кажется, подразумевает, что вы пытались инициировать ipv6-соединение с 'mgibson-dev' на порту 9001. Бит SYN_SENT означает, что вы запустили пакет TCP SYN, но не получили ответа.
Если вы не слушаете адрес ipv6 localhost на TCP 9001, я сначала предполагаю, что у вас где-то есть брандмауэр, который куда-то отбрасывает пакет возврата. Обычно, если порт закрыт, вы ожидаете возврата пакета RST, а затем он будет знать, что порт не открыт, и попробует адрес ipv4. Поскольку пакет RST не проходит, он просто зависает в ожидании ответа и, в конечном итоге, время ожидания истекает.
Короче говоря, проверьте свой брандмауэр, чтобы разрешить весь входящий трафик с localhost как на ipv4, так и на ipv6.