Java服务器可以在32位系统中工作,但不能在64位系统中工作。为什么?

5

我在64位操作系统(Windows 7 Ultimate)上运行时遇到了一个奇怪的异常,但在32位Win7 Ultimate上运行时没有出现。目前正在使用Java版本1.6.0_26。

running server!
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)

以下是代码:

//import java.net.ServerSocket;
//import java.net.Socket;
import java.io.*;
import java.net.*;




public class Server {


 public static void main(String[] args) {
 System.out.println("running server!");
  int nreq = 1;
  try{
   ServerSocket sock = new ServerSocket(7337);
  for(;;){
   Socket newsock = sock.accept();
   System.out.println("Creating thread...");
   Thread t = new ThreadHandler(newsock, nreq);
   t.start();
   nreq++;
  }
  }

  catch(Exception e)
  {

   e.printStackTrace();

  }
 }
}

在这个错误所指向的行上,指向了这一段代码:

Socket newsock = sock.accept();

这个问题从未得到令人满意的答复。它不是防火墙问题或管理员权限问题。 - iForgotMyLogin
我是新来的,不知道他的能力,但我认为这个事实应该传达出无望的感觉。 - iForgotMyLogin
当您的声望超过75分时,您可以在此问题上设置悬赏(需要花费50个声望点)- 这可能会吸引更多的答案。 - assylias
3个回答

1

你的Windows 7系统和安装的Java SDK版本可能存在问题。请从Oracle官网下载并安装最新版本的Java SDK 7,看看是否有所帮助。


0

这些问题可能会发生在JVM和操作系统之间不匹配时,其中一个运行32位,另一个运行64位。


1
通常情况下,您应该能够在64位操作系统上运行32位JRE的任何Java程序。而且通常情况下,在32位操作系统上甚至不能启动64位JVM(它应该在出现任何网络错误之前就已经崩溃了)。但是,我肯定会鼓励在64位操作系统上运行64位JRE。 - paulsm4
目前它正在运行Java版本1.6.0_26,我会尝试其他的。 - iForgotMyLogin

0

那是一个我忘记密码的旧账户。我从未见过有人能够解决这个问题(或者遇到同样的问题)。之前我尝试过降级Java版本,但仍然存在相同的问题。 - iForgotMyLogin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接