14

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

他に試せることはありますか?

4

8 に答える 8

6

Java に IPv4 スタックを使用するように指示すると機能しますか?

サーバーとクライアントを起動するときは、次のコマンド ライン オプションを使用します。

-Djava.net.preferIPv4Stack=true

こちらもご覧ください

于 2011-11-28T20:36:16.550 に答える
5

Alienware m17x R3 を使用していますが、Java でもまったく同じエラーが発生しましたが、Minecraft でも発生しました。古い Java6u33 をインストールすると問題は解決しましたが、Java7 の新しい更新は数か月待っても機能しないことがわかりました。そこで、最終的に Dell の Web サイトにアクセスし、Alienware ラップトップ用の最新のネットワーク ドライバーをダウンロードして (Alienware は現在 Dell が所有しているため)、すぐに問題を解決しました。

于 2012-09-24T02:59:17.913 に答える
4

あなたのマシンはIPv6構成を持っているようで、Javaではデフォルトで優先されるので、JVM引数として-Djava.net.preferIPv4Stack=trueでサーバーとクライアントを起動してみてください:

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

また、Windows のファイアウォールが許可を求めたときに、アプリケーションのネットワーク アクセスを拒否していないことを確認してください。その場合は、コントロール パネルで設定を変更できます。

于 2011-12-01T19:52:25.397 に答える
3

Java アプリケーションだけでなく、JRE がネットワーク共有上にある特定のコンステレーションでまさにこのエラーを生成する Windows バグがあります: https://bugs.openjdk.java.net/browse/JDK-8068568

解決策は、ローカル ドライブに JRE インストールを使用するか、JRE exe のすべての祖先フォルダーに List Folder 権限を付与することです。

https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/3076a9cd-57a0-418d-8de1-07adc3b486bbでは、DWORD 値 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\FltMgr\UseTildeShortcut を追加することをお勧めします試す機会がなかったコンテンツ「1」。名前が 8 文字を超えるネットワーク共有では発生しないという Microsoft サポート フォーラムの投稿を読んだことも覚えていると思いますが、その投稿はもう見つかりません。

于 2018-03-08T09:46:21.500 に答える
1

ここから永続的な変更を行う方法を見つけました。

あなたがする必要があるのは、JAVA_TOOL_OPTIONSという名前のシステム変数を追加し、これをJavaが起動するたびにコマンドライン引数としてJavaに渡したいものに設定することです。

-Djava.net.preferIPv4Stack=true

于 2012-03-29T01:05:58.990 に答える
0

ネットワークまたはローカルホストに接続する他のアプリケーションを実行できますか? 私は少し前に同様の問題を抱えていました(Win7のみ)Network connection-> Repain. 問題は、ルーティング テーブルが破損し、localhostルートがそこから消え、接続しようとしているアプリケーションlocalhostがあなたのものと同じエラーでクラッシュしたという事実から発生しました。

コマンドラインで実行route -printして出力を投稿できますか?

編集: IP スタックが破損しているようです。MS からのこの修正を試してください。

于 2011-11-21T18:48:59.250 に答える