【问题标题】:What can cause “ IO error java.net.SocketException: select failed ”?什么会导致“IO error java.net.SocketException: select failed”?
【发布时间】: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


【解决方案1】:

由于权限,我遇到了这个问题。我更习惯于 Linux,我需要检查 IPTables 的设置(或禁用它),诸如绑定到端口

【讨论】:

猜你喜欢
  • 2017-03-31
  • 1970-01-01
  • 1970-01-01
  • 2014-07-17
  • 1970-01-01
  • 2018-01-06
  • 2017-04-02
  • 2018-12-31
相关资源
最近更新 更多