【发布时间】:2012-08-12 23:28:33
【问题描述】:
我有一个服务器程序在我的笔记本电脑、相同的路由器和相同的代码上运行。它工作正常,客户端可以连接。但是,当我将工作区复制到我的 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本身有关。我最困惑。基本上是打不开socket?
这是完整的堆栈跟踪:
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
【问题讨论】:
-
听起来好像说没有连接,因此抛出异常。
-
什么意思?我现在用同一台电脑在线。它只是应该打开端口以侦听传入的客户端连接,该程序不需要建立任何客户端-服务器连接即可开始运行,甚至无法运行。
-
第 18 行是:Socket newsock = sock.accept();
-
@ColeJohnson ServerSocket.accept() 应该阻塞,直到有 连接。
-
@EJP,这很有趣。那你怎么看?在我在客户端启动一个连接之前,应该没有传入连接。从我单击运行的那一刻起,它就以这种方式失败。这听起来像是一个很好的提示,但我不知道如何解释它。
标签: java sockets io socket.io serversocket