2012-01-18 51 views
0

我在Windows7上使用Android AVD中的以下java代碼創建服務器,並使用serverPort = 1131;無法將Window7上的端口1131與AVD綁定

  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上運行一些特殊的服務器嗎?

請幫忙。

感謝

回答

2

我發現在MSDN網站上的以下(搜索網站 「綁定」 和 「EACCES」):

WSAEACCES - 10013

權限被拒絕。

嘗試以訪問權限禁止的方式訪問套接字。一個示例是使用廣播地址sendto 未使用setsockopt(SO_BROADCAST)設置廣播權限。

另一個可能的原因WSAEACCES錯誤是,當綁定函數被調用(在Windows NT 4.0 SP4或更高版本), 另一個應用程序,服務或內核模式驅動程序綁定到具有獨佔訪問 同一地址。這種獨佔訪問是具有SP4和更高版本的Windows NT 4.0的新功能 ,並且由 使用SO_EXCLUSIVEADDRUSE選項實現。

因此,如果我們假設JVM本地庫映射WSAEACCES這一例外,有兩個明顯的可能的解釋:

  • 這是一個基於權限的事情。 ADV沒有綁定到該端口的權限。

  • 某些其他應用程序已使用SO_EXCLUSIVEADDRUSE套接字選項綁定到端口。

IMO,要麼解釋是合理的。 (或者它可能是別的......)

+0

雖然,最初也是(通過我的Linux的exp),我認爲這是與在相同的端口上運行的進程相關的一些問題。感謝史蒂芬贊同這一點。我將端口更改爲8888,現在我沒有收到該錯誤。 – Fooo 2012-01-19 00:32:01

相關問題