web-dev-qa-db-ja.com

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);
}

(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を使用しています。
  • ファイアウォールでブロックされていません。ファイアウォールをオフにしましたが、まだこの問題があります。

この問題を解決するにはどうすればよいですか、または確認する必要がありますか?

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

EDIT:@PhilippeLMと@ beny23を使用して、Javaシステム変数Java.net.preferIPv4Stackをtrueは私の問題を解決します。ただし、恒久的な修正が必要です。Javaアプリケーションを実行するたびにシステム変数を指定したくありません。

これが私がもう一度運が悪いと試みたことです:

  • 以下の手順に従って、マシンの設定でIPv4を優先するように設定します これらの手順
  • 行を追加するJava.net.preferIPv4Stack=trueからnet.propertiesファイル%Java_HOME%\jre\lib

他に試すことができるものはありますか?

14
abourg28

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

5
David

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

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

-Djava.net.preferIPv4Stack=true

参照 ここ

6
beny23

お使いのマシンはIPv6構成になっているようで、 Javaではデフォルトで推奨 なので、-Djava.net.preferIPv4Stack = trueJVM引数として:

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

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

4
PhilippeLM

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文字より長いネットワーク共有ではこれは起こらないと述べたマイクロソフトサポートフォーラムの投稿を読んだことも覚えていると思いますが、投稿は見つかりません。

2

また、IDEが期待どおりのJREを使用しているかどうかも確認してください。
同じ問題が発生しました:

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

実行構成を確認したところ、デフォルトのJREが予期しない「プロジェクト実行環境「JavaSE1.7」を指していた。

オプションの代替JREに変更し、Java 8をインストール済みのjreとして設定しました。これで問題が解決しました。

1
Techflash

これを here から永続的に変更する方法を見つけました。

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

-Djava.net.preferIPv4Stack=true

1
Matt Habel

ネットワークまたはローカルホストに接続する他のアプリケーションを実行できますか?しばらく前に同様の問題があり(Win7のみ)、Network connection-> Repainにアクセスするだけで修正しました。この問題は、ルーティングテーブルが破損していて、localhostルートがそこから消え、localhostに接続しようとするアプリケーションが、同じエラーでクラッシュしていたことが原因でした。

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

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

0
GETah

ネットワークの場所にJDKをインストールしたかどうかを確認してください。はいの場合は、ローカルドライブディスクのjdkの場所を変更し、権限に制限がないことを確認してください

0
Bruno Dong