2010-12-16 115 views
3

對於未連接和綁定的DatagramSocket,接收方法調用(禁用SO_TIMEOUT)會因以下異常而意外失敗。DatagramSocket.receive()失敗並出現意外的SocketException

java.net.SocketException: socket closed 
at java.net.PlainDatagramSocketImpl.receive0(Native Method) 
at java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:136) 
at java.net.DatagramSocket.receive(DatagramSocket.java:712) 

另外我還沒有明確地關閉套接字。
在帶有JRE-6的Windows Server 2008中發生此錯誤。

即使在調用DatagramSocket.close()時,在同一套接字地址上重新創建一個新的DatagramSocket也失敗了。

您能否讓我知道錯誤的可能原因?

+0

請向我們顯示您的源代碼,導致例外,請。 – Thomas 2010-12-16 18:11:36

回答

0

java.net.SocketException異常:插座 關閉

這意味着,已經關閉了套接字。

+0

謝謝。但是我沒有明確地關閉DatagramSocket,這就是爲什麼我說這是意想不到的。 – Amarnath 2010-12-17 04:16:48

+0

這個例外與你不同意,是嗎? – EJP 2010-12-17 04:40:11

1

我遇到了同樣的問題。
檢查套接字的「closed」和「connectState」字段。

/* 
* Connection state: 
* ST_NOT_CONNECTED = socket not connected 
* ST_CONNECTED = socket connected 
* ST_CONNECTED_NO_IMPL = socket connected but not at impl level 
*/ 
static final int ST_NOT_CONNECTED = 0; 
static final int ST_CONNECTED = 1; 
static final int ST_CONNECTED_NO_IMPL = 2; 
相關問題