2011-04-10 61 views
2

我有以下結構:的ServerSocket失敗upons建設

try { 
    serverSocket = new ServerSocket(port); 
} catch (Exception e) { 
    throw new RuntimeException("Could not create server socket."); 
} 

和建設失敗,我得到「無法創建服務器套接字」錯誤。端口始終爲8085.我在我的(Windows 7)防火牆中打開了出境和入境端口。可能是什麼問題呢?

唯一的例外是IOException異常:

異常在線程 「主」 了java.lang.RuntimeException:無法創建服務器套接字。 。 在cs236369.proxy.ProxyServer(ProxyServer.java:23) 在cs236369.proxy.ProxyServer.main(ProxyServer.java:62)

運行netstat -an給出以下結果:

TCP 0.0.0.0:8085   0.0.0.0:0    LISTENING 
TCP [::]:8085    [::]:0     LISTENING 

堆棧跟蹤:

java.net.BindException: Address already in use: JVM_Bind 
at java.net.PlainSocketImpl.socketBind(Native Method) 
at java.net.PlainSocketImpl.bind(Unknown Source) 
at java.net.ServerSocket.bind(Unknown Source) 
at java.net.ServerSocket.<init>(Unknown Source) 
at java.net.ServerSocket.<init>(Unknown Source) 
at cs236369.proxy.ProxyServer.<init>(ProxyServer.java:21) 
at cs236369.proxy.ProxyServer.main(ProxyServer.java:63) 
+1

e是什麼例外?你能否把它打印出來並寄到這裏? – 2011-04-10 19:30:21

+0

是與管理員用戶登錄到Windows的用戶嗎? – MeBigFatGuy 2011-04-10 19:32:51

+0

我以系統中唯一的用戶身份登錄,該用戶是管理員。 – 2011-04-10 19:36:41

回答

1

根據API,一個BindException

表示發生錯誤時發生錯誤,而 試圖將套接字綁定到本地地址和端口 。通常,端口 正在使用中,或者請求的本地地址 無法分配。

基本上,該端口可能會被另一個進程使用,甚至可能是由於不乾淨關閉而導致同一應用程序的另一個實例。這link可能會幫助您排除故障。

注:

運行netstat -an命令的發佈結果似乎驗證端口8085是在使用多個進程,這將導致在您遇到的BindException

1

你會得到你的異常的更詳細的原因,如果您在新拋出的異常捕獲異常:

try { 
    serverSocket = new ServerSocket(port); 
} catch (Exception e) { 
    throw new RuntimeException("Could not create server socket.", e); 
} 

我最初的猜測,不過,是該端口已在使用,如果你已經處理了防火牆問題。