我的笔记本电脑上运行的服务器程序,相同的路由器和相同的代码。它工作正常,客户可以连接。然而,当我将工作区复制到我的PC并运行它时,我得到了这个废话:
IO错误java.net.SocketException:选择失败
这是代码......
public static void main(String[] args) {
System.out.println("running server!");
int nreq = 1;
try{
ServerSocket sock = new ServerSocket(7331);
for(;;){
Socket newsock = sock.accept();
System.out.println("Creating thread...");
//Thread t = new ThreadHandler(newsock, nreq);
//t.start();
nreq++;
}
}
catch(Exception e)
{
System.out.println("IO error " + e);
}
基本上什么可能导致这个错误(我在网上找不到有用的信息)在一台PC而不是另一台PC上发生?它必须与PC本身有关。我最困惑。基本上它不能打开插座吗?
这是完整的堆栈跟踪:
java.net.SocketException: select failed
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(Unknown Source)
at java.net.ServerSocket.implAccept(Unknown Source)
at java.net.ServerSocket.accept(Unknown Source)
at Server.main(Server.java:18)
如果它是相关的,我在PC上使用Windows 7 64位Ultimate会给我带来麻烦。它工作正常的笔记本电脑是Windows 7 32位。因此,我能说出的唯一可辨别的差异是32比64比特。
这可能是相关的吗?我不明白。 http://forums.codeguru.com/showthread.php?522257-Windows-Sockets-64-bit
答案 0 :(得分:1)
由于权限,我遇到了这个问题。我更习惯于Linux,我需要检查IPTables的设置(或禁用它),权限,例如绑定到端口的非root用户< 1024.我相信在Windows上,您需要检查用户的管理权限和Windows防火墙。