无法使用AVD将Windows 7上的端口1131绑定

时间:2012-01-18 14:27:00

标签: java android windows-7 httpserver

我在Windows7上使用Android AVD中的以下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上运行服务器?

请帮助。

由于

1 个答案:

答案 0 :(得分:2)

我在MSDN网站上找到以下内容(在网站上搜索“bind”和“EACCES”):

  

WSAEACCES - 10013

     

许可被拒绝。

     

尝试以其访问权限禁止的方式访问套接字。一个例子是使用sendto的广播地址   没有使用setsockopt(SO_BROADCAST)设置广播权限。

     

WSAEACCES错误的另一个可能原因是当调用绑定函数时(在带有SP4及更高版本的Windows NT 4.0上),   另一个应用程序,服务或内核模式驱动程序绑定到   相同的地址与独家访问。这种独家访问是一种新的方式   带有SP4及更高版本的Windows NT 4.0的功能,由。实现   使用SO_EXCLUSIVEADDRUSE选项。

因此,如果我们假设JVM本机库将WSAEACCES映射到此异常,则有两种明显的可能解释:

  • 这是基于权限的事情。 ADV无权绑定到该端口。

  • 其他一些应用程序已使用SO_EXCLUSIVEADDRUSE套接字选项绑定到端口。

IMO,任何一种解释都是合理的。 (或者它可能是其他东西......)