2012-11-17 77 views
5

我得到這個奇怪的例外,只有當運行在64位(Windows 7的最終)不是當運行32位win7最終。目前其對Java版本1.6.0_26Java服務器工作在32位而不是64位。爲什麼?

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(); 
+0

可能重複[哪些原因會導致「IO錯誤java.net.SocketException異常:選擇失敗「?](http://stackoverflow.com/questions/11926655/what-c​​an-cause-io-error-java-net-socketexception-select-failed) – assylias

+0

這個問題從來沒有令人滿意的答案。這不是防火牆問題或管理員權限問題 – iForgotMyLogin

+0

我是新來的,不知道他的威力,但我認爲這個事實應該傳達絕望 – iForgotMyLogin

回答

0

這些問題可能發生,當JVM和OS之間不匹配時。一個運行32位,另一個運行64位。

+1

通常,您應該能夠在64位操作系統上運行帶有32位JRE的Java程序。一般來說,你甚至不應該能夠在32位操作系統上啓動一個64位的JVM(它應該會在你發生任何網絡錯誤之前就會死掉很久)。但是,是的,我肯定會鼓勵在64位操作系統上運行64位JRE。 – paulsm4

+0

@ paulsm4感謝您的澄清。 –

+0

目前運行在java版本 1.6.0_26我會嘗試其他人 – iForgotMyLogin

1

您肯定可能會遇到Windows 7和您安裝的Java SDK版本的問題。從oracle網站下載並安裝最新版本的Java SDK 7。看看是否有幫助。

0

我做不是認爲問題是Java 32位與64位。

問題可能是Windows 32位與64位Windows,但是:

ALSO:

1)請嘗試用這個JVM上運行選項:

  • -D java.net.preferIPv4Stack =真

2)請確認您已經安裝了64位版本的Java

+0

這是一箇舊帳戶,我失去了密碼。我從來沒有見過任何人能夠解決這個問題(或者有同樣的問題)。我之前嘗試過的一件事是將Java版本降級到另一個版本。它有同樣的問題 – iForgotMyLogin

相關問題