Не удается связать порт 1131 на Window7 с AVD - PullRequest
0 голосов
/ 18 января 2012

Я использую следующий код Java в Android AVD для Windows7 для создания моего сервера с 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)
* 1006брандмауэр на моей машине выключен, и я также добавил специальные правила для этого.Нужно ли делать что-то особенное для запуска сервера на AVD на Window7?

Пожалуйста, помогите.

Спасибо

1 Ответ

2 голосов
/ 18 января 2012

На сайте MSDN я нашел следующее (поищите на сайте «bind» и «EACCES»):

WSAEACCES - 10013

В доступе отказано.

Была предпринята попытка получить доступ к сокету способом, запрещенным его правами доступа. Пример использования широковещательного адреса для sendto без разрешения широковещания с использованием setsockopt (SO_BROADCAST).

Другая возможная причина ошибки WSAEACCES заключается в том, что при вызове функции связывания (в Windows NT 4.0 с пакетом обновления 4 и более поздних версий) другое приложение, служба или драйвер режима ядра связаны с тот же адрес с эксклюзивным доступом. Такой эксклюзивный доступ является новым особенность Windows NT 4.0 с SP4 и выше, и реализуется используя опцию SO_EXCLUSIVEADDRUSE.

Таким образом, если мы предположим, что собственные библиотеки JVM отображают WSAEACCES на это исключение, есть два очевидных возможных объяснения:

  • Это основанная на разрешениях вещь. У ADV нет разрешения на привязку к этому порту.

  • Некоторые другие приложения уже привязаны к порту с параметром сокета SO_EXCLUSIVEADDRUSE.

ИМО, любое объяснение правдоподобно. (Или это может быть что-то еще ...)

...