【问题标题】:Java server works in 32-bit, but not in 64-bit. Why?Java 服务器在 32 位下工作,但在 64 位下不工作。为什么?
【发布时间】:2012-11-18 07:52:08
【问题描述】:

只有在 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();

【问题讨论】:

标签: java sockets 64-bit serversocket java-server


【解决方案1】:

Windows 7 和您安装的 Java SDK 版本肯定有问题。从 oracle 网站下载并安装最新版本的 Java SDK 7。看看是否有帮助。

【讨论】:

    【解决方案2】:

    当 JVM 和操作系统不匹配时,可能会出现这些问题。一个运行 32 位,另一个运行 64 位。

    【讨论】:

    • 一般来说,您应该能够在 64 位操作系统上运行任何带有 32 位 JRE 的 Java 程序。通常,您甚至不应该能够在 32 位操作系统上启动 64 位 JVM(它应该会在您出现任何网络错误之前很久就死掉)。但是,是的,我肯定会鼓励在 64 位操作系统上运行 64 位 JRE。
    • @paulsm4 感谢您的澄清。
    • 目前它运行在 java 版本 1.6.0_26 我会尝试一些其他的
    【解决方案3】:

    我确实相信问题出在 Java 32 位与 64 位之间。

    问题可能是 Windows 32 位与 Windows 64 位,但是:

    还有:

    1) 请尝试使用此 JVM 选项运行:

    • -Djava.net.preferIPv4Stack=true

    2) 请确保您已安装 64 位 版本的 Java

    【讨论】:

    • 那是一个旧帐户,我丢失了密码。我从来没有见过任何人能够解决这个问题(或有同样的问题)。我之前尝试过的一件事是将 java 的版本降级到另一个版本。它有同样的问题
    猜你喜欢
    • 2010-11-21
    • 2018-05-16
    • 1970-01-01
    • 2011-03-04
    • 2019-05-20
    • 2016-09-27
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    相关资源
    最近更新 更多