无法使用 AVD 在 Window7 上绑定端口 1131

发布于 2024-12-27 10:51:21 字数 1468 浏览 1 评论 0原文

我在 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 上运行服务器吗?

请帮忙。

谢谢

I am using the following java code in Android AVD on Windows7 to create my server with 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();
            }
    }

I get the following exception :-

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

The firewall on my machine is off & I have added special rules for that as well.
Do I need to do something special for running server on AVD on Window7?

Kindly help.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

执手闯天涯 2025-01-03 10:51:21

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

WSAEACCES - 10013

权限被拒绝。

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

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

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

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

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

IMO,这两种解释都是合理的。 (或者可能是别的东西......)

I found the following on the MSDN site (search the site for "bind" and "EACCES"):

WSAEACCES - 10013

Permission denied.

An attempt was made to access a socket in a way forbidden by its access permissions. An example is using a broadcast address for sendto
without broadcast permission being set using setsockopt(SO_BROADCAST).

Another possible reason for the WSAEACCES error is that when the bind function is called (on Windows NT 4.0 with SP4 and later),
another application, service, or kernel mode driver is bound to the
same address with exclusive access. Such exclusive access is a new
feature of Windows NT 4.0 with SP4 and later, and is implemented by
using the SO_EXCLUSIVEADDRUSE option.

Thus, if we assume that the JVM native libraries map WSAEACCES to this exception, there are two obvious possible explanations:

  • This is a permissions-based thing. ADV doesn't have permission to bind to that port.

  • Some other application has already bound to the port with the SO_EXCLUSIVEADDRUSE socket option.

IMO, either explanation is plausible. (Or it could be something else ...)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文