Java 我在接受服务器套接字上的客户端连接时发现了IOException。现在怎么办?

Java 我在接受服务器套接字上的客户端连接时发现了IOException。现在怎么办?,java,sockets,io,ioexception,serversocket,Java,Sockets,Io,Ioexception,Serversocket,IOException在从中抛出时表示什么? 我的意思是:如果我有一个接受连接的循环,它将在这里被阻塞: socketclient=serverSocket.accept() 如果我在接受过程中捕获到一个IOException,这是否意味着我应该关闭服务器套接字,即它是一个严重的问题,或者是记录异常并返回serverSocket.accept()中接受连接,就像什么都没有发生一样?即服务器套接字功能齐全。来自API文档: IOException,如果在等待连接时发生I/O错误 这意味着,若在这里

IOException
在从中抛出时表示什么?
我的意思是:如果我有一个接受连接的循环,它将在这里被阻塞:

socketclient=serverSocket.accept()

如果我在接受过程中捕获到一个
IOException
,这是否意味着我应该关闭服务器套接字,即它是一个严重的问题,或者是记录异常并返回
serverSocket.accept()
中接受连接,就像什么都没有发生一样?即服务器套接字功能齐全。

来自API文档:

IOException,如果在等待连接时发生I/O错误

这意味着,若在这里抛出异常,则会出现问题。例如,端口忙,网络适配器不可用等,请尝试稍等,然后重新连接。如果这种情况再次发生,则无需采取任何措施。无法连接到所选端口


换港?换地址?关闭应用程序并显示错误消息?:(

我只看到过一个accept抛出异常的情况:打开的文件太多。根据您的应用情况,您可以等待并再次进入accept,关闭/尝试close/bind/accept或fail循环。我们同时实施了这两种策略,并且总是以失败告终。同样,如果您的客户寿命很短,您可能会恢复r、 我们的客户端长寿…

您可以从文件描述符的不足中获得这些。另一种可能是SocketTimeoutException,如果您设置了超时并且超时。另一种可能是服务器套接字异步关闭。只有最后一种情况是致命的。

因此,尝试稍等一下,然后重新连接。
什么t你的意思是重新连接吗?而且
端口正忙
将是
BindException
而不是
IOException
你误解了Javadoc和这个问题。这是关于ServerSocket.accept()。更改端口等并不能解决这个问题。1)
打开的文件太多
您的意思是客户端套接字太多吗?2)不理解您建议的两种策略。a)返回接受?b) 关闭并重新创建套接字?还有别的吗。是的,我们有太多的连接~8000,并且在节点中没有正确配置,您遇到了问题。2.正确的。这就是我们稍后要做的,等待并再次尝试接受并重新创建套接字。如果文件描述符用完,则必须在重试之前关闭某些内容,除非您希望立即再次出现相同的错误。一次又一次。一次又一次。仅仅关闭ServerSocket并打开一个新的并不能释放任何描述符。@Cratylus他不是这么说的。我不知道你从哪里得到这些奇怪的想法,也不知道你是如何形成这些“如此”的推论的,而这些推论并不是从已经说过的任何话中得出的。@Cratylus连接到了他们在仍然开放时连接到的任何东西。他们不受关闭它的影响。他们什么也没发生。他们保持联系。他们不会被吊死。你需要被告知多少次,多少种方式?所以你建议尝试重新接受,除非我看到套接字已关闭?@Cratylus请不要在我们应该谈论接受连接时谈论重新连接。好的!所以我应该回到
serverSocket.accept()
,除非在捕获
IOException
时,
serverSocket.isClosed()
返回
true
?这取决于。如果描述符已用完,则必须关闭一个描述符。如果你有一个超时,你需要考虑为什么设置它。当你说描述符你指的是客户端套接字?