Java.net.SocketException: Недопустимый аргумент: connect
Мой новый ноутбук (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
.
Есть ли что-нибудь еще, что я могу попробовать?
Ответы
Ответ 1
У меня есть Alienware m17x R3, и я обнаружил, что у меня была такая же ошибка с Java, хотя я столкнулся с ней с Minecraft. Установка устаревшего Java6u33 устранила проблему, но я обнаружил, что более новые обновления Java7 по-прежнему не работают даже после нескольких месяцев ожидания. Поэтому я в конце концов перешел на веб-сайт Dell и загрузил самые последние сетевые драйверы для моего ноутбука Alienware (поскольку Alienware теперь принадлежит Dell), и это сразу устранило проблему.
Ответ 2
Работает ли он, если вы скажете Java использовать стек IPv4?
Используйте команду командной строки при запуске сервера и клиента.
-Djava.net.preferIPv4Stack=true
См. также здесь
Ответ 3
У вашего устройства, похоже, есть конфигурация IPv6 и предпочтительнее по умолчанию в Java, поэтому попробуйте запустить свой сервер и клиент с -Djava.net. preferIPv4Stack = true как аргументы JVM:
java -Djava.net.preferIPv4Stack=true Client.main
Также убедитесь, что вы не запретили доступ к сети приложений, когда брандмауэр Windows попросил вас получить разрешение. Если вы это сделали, вы можете изменить настройки на панели управления.
Ответ 4
Также проверьте, использует ли ваша среда IDE ожидаемый JRE.
У меня была такая же проблема:
java.sql.SQLException: JZ006: Caught IOException: java.net.SocketException: Invalid argument: create
Когда я проверил свою конфигурацию запуска, мой JRE по умолчанию указывал на "Environment Execution Environment" JavaSE1.7, которого я не ожидал.
Я изменил его на вариант Alternate JRE и установил JAVA 8 как установленный jre.
которая решила мою проблему.
Ответ 5
Можно ли запускать другие приложения, которые подключаются к сети или локальному хосту?
У меня была аналогичная проблема некоторое время назад (только на Win7), и я исправил ее, перейдя только к Network connection-> Repain
. Проблема возникла из-за того, что моя таблица маршрутизации была повреждена, маршрут localhost
исчез из нее, и любое приложение, пытающееся подключиться к localhost
, разбилось с той же ошибкой, что и ваша.
Можете ли вы запустить route -print
в командной строке и опубликовать вывод?
EDIT:
Похоже, что ваш IP-стек поврежден, вы можете попробовать это исправление из MS
Ответ 6
Я выяснил способ сделать это постоянным изменением здесь.
Что вам нужно сделать, это добавить системную переменную с именем JAVA_TOOL_OPTIONS и установить ее так, чтобы вы передавали java в качестве аргумента командной строки всякий раз, когда она запускается, в вашем и в моем случае
-Djava.net.preferIPv4Stack=true