ServerSocket.accept () на хосте не принимает соединение, исходящее из гостевой виртуальной машины - PullRequest
0 голосов
/ 14 января 2019

В моем приложении Java у меня есть следующий код:

_serverSocket = new ServerSocket();
_serverSocket.setReuseAddress(true);
_serverSocket.bind(new InetSocketAddress(port));
// _serverSocket = ServerSocket[addr=0.0.0.0/0.0.0.0,localport=33202]
_socket = _serverSocket.accept();
...

В виртуальной машине я запускаю клиентское приложение (черный ящик), которое пытается подключиться к указанному серверу. По неизвестной причине соединение не установлено, и accept никогда не возвращается.

Я знаю, что клиентское приложение пытается подключиться, поскольку я вижу соответствующие пакеты в Wireshark: Wireshark screen capture

Я не могу запустить одно и то же клиентское приложение на своем хост-компьютере, но я могу успешно установить TCP-соединение с хоста с nc, поэтому я знаю, что сервер фактически прослушивает. ВМ и хост находятся в подсети 10.11.1.0. Хост имеет IP 10.11.1.1, ВМ 10.11.1.68. Они могут пинговать друг друга.

Но все же по какой-то причине TCP-пакеты, похоже, не приходят в мой Java-код. Любые идеи, почему или как я мог бы далее отладить это?

1 Ответ

0 голосов
/ 15 января 2019

Я мог бы решить мою проблему. Это была действительно проблема с настройками брандмауэра Windows. После добавления входящего правила для javaw.exe конкретного JDK, который я использовал для запуска сервера, соединение могло быть успешно установлено.

Привет корпоративным ИТ-специалистам, которые не позволили мне быстро отключить брандмауэр, чтобы определить, не является ли это причиной проблемы. : \

...