Назад | Перейти на главную страницу

Не могу подключиться к локальному серверу

Я переношу клиент-серверное приложение с 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.