3

我有一个服务器程序在我的笔记本电脑、相同的路由器和相同的代码上运行。它工作正常,客户端可以连接。但是,当我将工作区复制到我的 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

4

1 回答 1

1

由于权限,我遇到了这个问题。我更习惯于 Linux,我需要检查 IPTables 的设置(或禁用它),诸如绑定到端口 < 1024 的非 root 用户之类的权限。我相信在 Windows 上你会想要检查你的用户的管理权限和您的 Windows 防火墙。

于 2012-08-13T01:31:49.197 回答