对于未连接和绑定(bind)的 DatagramSocket,接收方法调用(禁用 SO_TIMEOUT)意外失败并出现以下异常。
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 也失败了。
你能告诉我错误的可能原因吗?
最佳答案
我遇到了同样的问题。
检查套接字的“关闭”和“连接状态”字段。
/*
* 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;
关于java - DatagramSocket.receive() 因意外的 SocketException 而失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4463556/