Сокет Java TCP: java.net.ConnectException: connect: адрес неверен на локальном компьютере или порт недействителен на удаленном компьютере - PullRequest
3 голосов
/ 20 ноября 2011

Я создаю сокет, используя socket = new Socket(host, port, InetAddress.getLocalHost(), clientPort);. Я хочу, чтобы сокет слушал определенный порт на стороне клиента. Но когда я использую InetAddress.getLocalHost(), я получаю java.net.ConnectException: connect: Address is invalid on local machine, or port is not valid on remote machine.

Но когда я использую InetAddress.getByName("localhost"), он работает нормально. Но мне нужен IP-адрес машины на стороне сервера. Поэтому, когда я использую socket.getInetAddress(), я хочу ipadress, а не 127.0.0.1.

Может кто-нибудь, пожалуйста, помогите. Я использую затмение. Это может быть проблема с брандмауэром?

Спасибо

Ответы [ 2 ]

1 голос
/ 20 ноября 2011

Вы используете форму с четырьмя аргументами конструктора Socket (действительно необычно; нормально использовать только форму с двумя аргументами и позволить ОС вычислять для себя локальную сторону адреса), поэтому вам необходимо убедиться, чточто два адреса, связанные с сокетом, совместимы, т. е. что таким образом можно маршрутизировать пакеты.В частности, если какой-либо конец является localhost, другой конец должен быть тоже, потому что этот адрес только когда-либо маршрутизируется через петлевой сетевой интерфейс.

Самое простое решение для вас (на стороне клиента) будетпереключитесь на использование конструктора с двумя аргументами, оставив ОС, чтобы выяснить остальное для вас;это делает хорошую работу.(Если сервер зависит от соединения client с определенного номера порта, это ужасно и ужасно хрупко.)

0 голосов
/ 20 ноября 2011

Звучит как путаница в отношении обязанностей на стороне клиента и на стороне сервера - похоже, что вы пытаетесь заставить два приложения Java общаться друг с другом на одном хосте через TCP / IP с использованием сокетов Java.

В этом случае вам сначала нужно использовать ServerSocket в приложении «server» для создания прослушивающего сокета на всех интерфейсах:

serverSocket = new ServerSocket(4444);

После этого вы сможете подключиться к ServerSocket из «клиента».'приложение с использованием Socket для подключения к локальному хосту:

clientSocket = new Socket("localhost", 4444);

Следующие страницы выглядят так, как будто они подробно описывают это:

All About Sockets

Надеюсь, это поможет.

...