Java.net.ConnectException: не удалось подключиться к /192.168.253.3 (порт 2468): соединение не выполнено: ECONNREFUSED (соединение отклонено)

Я хочу передать некоторые данные между ПК и мобильным телефоном с WiFi.

Вот как я получаю IP-адрес WiFi:

String ip  = String.format(
                    "%d.%d.%d.%d",
                    (wifiInfo.getIpAddress() & 0xff),
                    (wifiInfo.getIpAddress() >> 8 & 0xff),
                    (wifiInfo.getIpAddress() >> 16 & 0xff),
                    (wifiInfo.getIpAddress() >> 24 & 0xff));

new Recive().execute(ip);

Это код отправки сообщения на ПК:

Socket socket = null;
String message = "test\r\n";
protected Void doInBackground(String... urls) {
    try {
        Log.i("ip", urls[0]);
        socket = new Socket(urls[0], 2468);
        toserver = new DataOutputStream(socket.getOutputStream());
        toserver.writeBytes(message);

        toserver.flush();
        toserver.close();
        socket.close();
        return null;
    } catch (Exception e) {
        Log.i("e", e.toString());
        return null;
    }
}

Но возникает ошибка,

java.net.ConnectException: не удалось подключиться к /192.168.253.3 (порт 2468): не удалось подключиться: ECONNREFUSED (соединение отклонено)

Кроме того, я использую телефон Android для запуска приложения.

Ответ 1

Ошибка connect failed: ECONNREFUSED (Connection refused) скорее всего, означает, что ничего не прослушивается на этом порту и на этом IP-адресе. Возможные объяснения включают в себя:

  • сервис потерпел крах или не был (успешно!) запущен,
  • ваш клиент пытается подключиться, используя неверный IP-адрес или порт,
  • ваш клиент пытается подключиться, используя DNS-имя, которое разрешается с неправильным IP, или
  • доступ к серверу блокируется брандмауэром, который "отказывается" от имени сервера/службы. Это довольно маловероятно, учитывая, что обычная практика (в наши дни) заключается в том, чтобы брандмауэры "закрывали дыру" от всех нежелательных попыток подключения.

Обратите внимание, что хотя у вас есть переменная массива с именем urls, она не может содержать реальные URL-адреса. Нет перегрузки конструктора Socket который принимает реальный URL в любой форме. Действительно, если вы указали URL-адрес в виде строки:

 new Socket("http://example.com", 42)

результат будет другим исключением. Аналогично, если вы попытаетесь подключиться к IP-адресу в сети, к которой вы не можете направить маршрут (например, "другая сеть WiFi"), тогда вы получите другое исключение; например, "хост не найден", "нет маршрута к хосту" или "нет маршрута к сети".

Ответ 2

Почему это могло произойти:

  • Сервер не смог отправить ответ: убедитесь, что бэкэнд работает правильно на IP и указанном порту.
  • SSL-соединения блокируются: исправить это, импортировав сертификаты SSL
  • Куки файлы не отправляются
  • Тайм-аут запроса: время ожидания запроса на изменение

Ответ 3

Распространенная ошибка при разработке приложения для Android, работающего на виртуальном устройстве на вашем компьютере разработчика, состоит в том, чтобы забыть, что виртуальное устройство не является тем же хостом, что и ваш компьютер разработчика. Поэтому, если ваш сервер работает на вашем компьютере разработчика, вы не можете использовать URL " http://localhost/...", так как он будет искать конечную точку сервера на виртуальном устройстве, а не на вашем компьютере разработчика.

Ответ 4

Я также получал ту же проблему, что и несколько IP-адресов, таких как мой общедоступный IP-адрес и IP-адрес по умолчанию localhost 127.0.0.1 в Windows и шлюзе по умолчанию, но тот же ответ. но я забыл проверить

C:> ipconfig

ipconfig четко скажите, что такое мой фактический IP-адрес этого адаптера, с которым я подключился, как я был связан с адаптером Wi-Fi. Мой IP-адрес покажет мне как:

Wireless LAN adapter Wireless Network Connection:

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::69fa:9475:431e:fad7%11
   IPv4 Address. . . . . . . . . . . : 192.168.15.92

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

Ответ 5

во-первых, я использовал формат "localhost: port", который встретил эту ошибку. Затем я изменил адрес на формат "ip: port" и проблема была решена.

Ответ 6

Я решил ту же проблему, я использовал сетевое соединение через прокси-сервер, когда я выбрал опцию не использовать прокси для внутренних и локальных соединений, проблема исчезла

Ответ 7

вы можете преобразовать домен в IP-адрес, потому что у каждого домена есть определенный IP-адрес, тогда вы решите эту проблему. Я надеюсь, что это поможет вам.