java.net.SocketException: Invalid argument: connect
次の基本的なコードを実行すると、新しいラップトップ (Alienware m17x) がエラーをスローします。
サーバー.java:
public static void main (String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket (8888);
Socket socket = serverSocket.accept();
}
クライアント.java:
public static void main (String[] args) throws Exception {
Socket socket = new Socket ("localhost", 8888);
}
(Server.java の起動後) Client.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 を再インストールしましたが、うまくいきません。
- これは、1 台のマシンでのみ発生します。デスクトップで同じコードを実行しましたが、例外は発生していません。両方で Windows 7 を使用しています。
- ファイアウォールによってブロックされていません。ファイアウォールをオフにしましたが、まだこの問題が発生しています。
この問題を解決するには、何を行うか、または確認する必要がありますか?
編集: 印刷出力のルーティング:
===========================================================================
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
他に試せることはありますか?