0

Windows7のAndroidAVDで次のJavaコードを使用して、serverPort=1131でサーバーを作成しています。

            try {
                    ServerSocket serverSocket = new ServerSocket(serverPort);

                    serverSocket.setReuseAddress(true);

                    while(isRunning){
                            try {
                                    final Socket socket = serverSocket.accept();

                                    DefaultHttpServerConnection serverConnection = new DefaultHttpServerConnection();

                                    serverConnection.bind(socket, new BasicHttpParams());

                                    httpService.handleRequest(serverConnection, httpContext);

                                    serverConnection.shutdown();
                            } catch (IOException e) {
                                    e.printStackTrace();
                            } catch (HttpException e) {
                                    e.printStackTrace();
                            }
                    }

                    serverSocket.close();
            } 
            catch (IOException e) {
                    e.printStackTrace();
            }
    }

次の例外が発生します:-

    01-18 06:30:03.381: W/System.err(1494): java.net.BindException: bind failed: EACCES (Permission denied)

私のマシンのファイアウォールはオフになっていて、そのための特別なルールも追加しました。Window7のAVDでサーバーを実行するために何か特別なことをする必要がありますか?

親切に助けてください。

ありがとう

4

1 に答える 1

2

MSDNサイトで次の情報を見つけました(サイトで「bind」と「EACCES」を検索してください)。

WSAEACCES-10013

アクセス拒否。

アクセス許可によって禁止されている方法でソケットにアクセスしようとしました。例として、setsockopt(SO_BROADCAST)を使用してブロードキャスト許可を設定せずにsendtoにブロードキャストアドレスを使用する場合があります。

WSAEACCESエラーのもう1つの考えられる理由は、バインド関数が呼び出されたときに(Windows NT 4.0 SP4以降)、別のアプリケーション、サービス、またはカーネルモードドライバーが排他的アクセスで同じアドレスにバインドされることです。このような排他的アクセスは、SP4以降を搭載したWindows NT 4.0の新機能であり、SO_EXCLUSIVEADDRUSEオプションを使用して実装されます。

WSAEACCESしたがって、JVMネイティブライブラリがこの例外に対応していると仮定すると、 2つの明らかな説明が考えられます。

  • これは権限ベースのものです。ADVにはそのポートにバインドする権限がありません。

  • 他のいくつかのアプリケーションは、SO_EXCLUSIVEADDRUSEソケットオプションを使用してすでにポートにバインドされています。

IMO、どちらの説明ももっともらしいです。(またはそれは何か他のものである可能性があります...)

于 2012-01-18T14:56:25.817 に答える