3

ラップトップで実行されているサーバープログラム、同じルーター、同じコードがあります。問題なく動作し、クライアントは接続できます。ただし、ワークスペースを PC にコピーして実行すると、次のナンセンスが発生します。

IO エラー java.net.SocketException: 選択に失敗しました

これがコードです...

public static void main(String[] args) {
    System.out.println("running server!");
        int nreq = 1;
        try{
            ServerSocket sock = new ServerSocket(7331);
        for(;;){
            Socket newsock = sock.accept();
            System.out.println("Creating thread...");
            //Thread t = new ThreadHandler(newsock, nreq);
            //t.start();
            nreq++;
        }
        }

        catch(Exception e)
        {

            System.out.println("IO error  " + e);

        }

基本的に、ある PC でこのエラー (オンラインで有用な情報を見つけることができません) が発生し、別の PC では発生しない原因は何ですか? それはPC自体に関するものでなければなりません。私は最も混乱しています。基本的にソケットを開くことはできませんか?

完全なスタックトレースは次のとおりです。

java.net.SocketException: select failed
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.PlainSocketImpl.accept(Unknown Source)
    at java.net.ServerSocket.implAccept(Unknown Source)
    at java.net.ServerSocket.accept(Unknown Source)
    at Server.main(Server.java:18)

関連する場合、問題が発生している PC で Windows 7 64 ビット Ultimate を使用しています。正常に動作するラップトップは、Windows 7 32 ビットです。したがって、私が認識できる唯一の違いは、32 ビットと 64 ビットの違いです。

これは関係がありますか?わかりません。 http://forums.codeguru.com/showthread.php?522257-Windows-Sockets-64-bit

4

1 に答える 1

1

パーミッションのためにこれに遭遇しました。私はLinuxに慣れており、IPTablesの設定を確認する(または無効にする)必要があります。ルート以外のユーザーが1024未満のポートにバインドするなどのアクセス許可が必要です。Windowsでは、ユーザーの管理者権限を確認する必要があると思います。およびWindowsファイアウォール。

于 2012-08-13T01:31:49.197 に答える