2010-12-16 214 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; 
相关问题