我在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上运行服务器?
请帮助。
由于
答案 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套接字选项绑定到端口。