java.net.SocketException: неверный аргумент: соединение - PullRequest
14 голосов
/ 21 ноября 2011

Мой новый ноутбук (Alienware m17x) выдает java.net.SocketException: Invalid argument: connect, когда я запускаю следующий основной код:

Server.java:

public static void main (String[] args) throws Exception {

    ServerSocket serverSocket = new ServerSocket (8888);
    Socket socket = serverSocket.accept();
}

Client.java:

public static void main (String[] args) throws Exception {
    Socket socket = new Socket ("localhost", 8888);
}

Каждый раз, когда я запускаю Client.java (после запуска Server.java), я получаю это исключение сокета. Вот полный след исключения:

Exception in thread "main" java.net.SocketException: Invalid argument: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at Client.main(Client.java:5)

Я пробовал несколько вещей, но, к счастью, исключение всегда выбрасывается. Вот что я пришел к выводу:

  • Изменение номеров портов ничего не меняет.
  • Это не проблема с сетью. Я получил исключение в школе и дома.
  • Я переустановил JVM и JDK, но не повезло.
  • Это происходит только на одном компьютере. Я запустил тот же код на своем рабочем столе, и я не получил никаких исключений. Я использую Windows 7 на обоих.
  • Не блокируется брандмауэром. Я выключил свои брандмауэры, и у меня все еще есть эта проблема.

Что я должен сделать или проверить, чтобы решить эту проблему?

EDIT: вывод на печать маршрута:

===========================================================================
Interface List
 15...e4 d5 3d 08 cb 83 ......Killer Wireless-N 1103 Network Adapter
 13...d0 df 9a b5 73 dc ......Bluetooth Device (Personal Area Network)
 11...d4 be d9 00 10 65 ......Atheros AR8151 PCI-E Gigabit Ethernet Controller (NDIS 6.20)
  1...........................Software Loopback Interface 1
 17...00 00 00 00 00 00 00 e0 Teredo Tunneling Pseudo-Interface
 16...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #2
 18...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter
 19...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #3
===========================================================================

IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0      192.168.0.1    192.168.0.191     25
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    306
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    306
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    306
      192.168.0.0    255.255.255.0         On-link     192.168.0.191    281
    192.168.0.191  255.255.255.255         On-link     192.168.0.191    281
    192.168.0.255  255.255.255.255         On-link     192.168.0.191    281
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    306
        224.0.0.0        240.0.0.0         On-link     192.168.0.191    281
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    306
  255.255.255.255  255.255.255.255         On-link     192.168.0.191    281
===========================================================================
Persistent Routes:
  None

IPv6 Route Table
===========================================================================
Active Routes:
 If Metric Network Destination      Gateway
 17     58 ::/0                     On-link
  1    306 ::1/128                  On-link
 17     58 2001::/32                On-link
 17    306 2001:0:4137:9e76:28f3:2721:524f:e2ef/128
                                    On-link
 15    281 fe80::/64                On-link
 17    306 fe80::/64                On-link
 17    306 fe80::28f3:2721:524f:e2ef/128
                                    On-link
 15    281 fe80::68c1:bc79:fefa:88a2/128
                                    On-link
  1    306 ff00::/8                 On-link
 17    306 ff00::/8                 On-link
 15    281 ff00::/8                 On-link
===========================================================================
Persistent Routes:
  None

РЕДАКТИРОВАТЬ: Как @PhilippeLM и @ beny23 заставили меня понять, что установка системной переменной java java.net.preferIPv4Stack в true решает мою проблему. Однако я хочу постоянное исправление. Я не хочу указывать системную переменную каждый раз, когда запускаю Java-приложение.

Вот то, что я попробовал без удачи еще раз:

  • Установка предпочтений моей машины для предпочтения IPv4, следуя этим шагам
  • Добавление строки java.net.preferIPv4Stack=true в файл net.properties в %JAVA_HOME%\jre\lib.

Могу ли я попробовать еще что-нибудь?

Ответы [ 8 ]

6 голосов
/ 29 ноября 2011

Работает ли это, если вы скажете Java использовать стек IPv4?

Используйте следующую опцию командной строки при запуске сервера и клиента.

-Djava.net.preferIPv4Stack=true

См. Также здесь

5 голосов
/ 24 сентября 2012

У меня есть Alienware m17x R3, и я обнаружил, что у меня была точно такая же ошибка с Java, хотя я столкнулся с ней с Minecraft.Установка более старой Java6u33 устранила проблему, но я обнаружил, что более новые обновления Java7 все еще не работали даже после нескольких месяцев ожидания.В итоге я зашел на сайт Dell и загрузил самые последние сетевые драйверы для моего ноутбука Alienware (поскольку Alienware теперь принадлежит Dell), и это сразу же решило проблему.

4 голосов
/ 01 декабря 2011

Ваш компьютер, кажется, имеет конфигурацию IPv6 и предпочитается по умолчанию в Java , поэтому попробуйте запустить сервер и клиент с -Djava.net.preferIPv4Stack = true в качестве аргументов JVM:

  java -Djava.net.preferIPv4Stack=true Client.main

Также убедитесь, что вы не запретили доступ к сети приложения, когда брандмауэр Windows запросил у вас разрешение. Если вы это сделали, вы можете изменить настройки на панели управления.

2 голосов
/ 08 марта 2018

Существует ошибка Windows, которая затрагивает не только Java-приложения и приводит именно к этой ошибке в определенных созвездиях, где JRE расположена на сетевом ресурсе: https://bugs.openjdk.java.net/browse/JDK-8068568

Решением является либо установка JRE на локальный диск, либо предоставление разрешения «Список папок» для всех папок-предков в JRE exe.

В https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/3076a9cd-57a0-418d-8de1-07adc3b486bb предлагается добавить значение DWORD HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ FltMgr \ UseTildeShortcut с содержимым "1", которое у меня не было возможности попробовать. Я также помню, как читал пост на форуме поддержки Microsoft, в котором говорилось, что этого не происходит в сетевых ресурсах, имя которых длиннее 8 символов, но я больше не могу найти этот пост.

1 голос
/ 07 декабря 2017

Также проверьте, использует ли ваша IDE JRE, которую вы ожидаете.
У меня была такая же проблема:

java.sql.SQLException: JZ006: Caught IOException: java.net.SocketException: Invalid argument: create

Когда я проверял свою конфигурацию запуска, мой JRE по умолчанию указывал на «Среду выполнения проекта« JavaSE1.7 », чего я не ожидал.

Я изменил его на опцию Alternate JRE и установил JAVA 8 в качестве установленного jre. которая решила мою проблему.

1 голос
/ 29 марта 2012

Я нашел способ сделать это постоянным изменением с здесь .

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

-Djava.net.preferIPv4Stack=true

0 голосов
/ 24 августа 2018

Проверьте, установлен ли JDK в сетевом расположении.если да, пожалуйста, измените местоположение jdk на локальном диске и подтвердите, что нет никаких ограничений относительно разрешения

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

Можете ли вы запустить другие приложения, которые подключаются к сети или локальному хосту?У меня была похожая проблема некоторое время назад (только на Win7), и я исправил ее, выбрав только Network connection-> Repain.Проблема возникла из-за того, что моя таблица маршрутизации была повреждена, маршрут localhost исчез из нее, и любое приложение, пытающееся подключиться к localhost, зависало с той же ошибкой, что и ваша.

Можете ли вы запустить route -print в командной строке и опубликовать вывод?

РЕДАКТИРОВАТЬ: Похоже, ваш стек IP поврежден, вы можете попробовать thisисправить от MS

...