Java中的服务器断开连接

Java中的服务器断开连接,java,client,stream,disconnect,Java,Client,Stream,Disconnect,相关帖子没有回答我的问题 我有一个服务器,它可以执行以下操作: EVERY TWO SECONDS DO: if the inputstream is not null { if inputStream.available() is 0 { return } print "handling input stream" handleTheInputStream(); } 即使在我的客户端断开连接后,服务器也无法通过IO

相关帖子没有回答我的问题

我有一个服务器,它可以执行以下操作:

EVERY TWO SECONDS DO: 
if the inputstream is not null {
     if inputStream.available() is 0 
     {
          return 
     }
     print "handling input stream"
     handleTheInputStream(); 
}
即使在我的客户端断开连接后,服务器也无法通过IOException识别它。另一篇帖子说我会看到一个流结束的角色。然而,事实并非如此,因为在我的客户端断开连接后,我从未看到“处理输入流”,这表明没有可用的数据

也许我目前理解这一点的方式有问题

请帮助。

不要使用
available()
-这表示当前是否有可用数据,而不是将来是否有可用数据。换句话说,它是用于检测断开连接的错误工具

基本上,您应该调用
read()
(并处理数据),直到它返回-1,此时表示客户端已断开连接。

不要使用
available()
——这表示当前是否有可用数据,而不是将来是否有可用数据。换句话说,它是用于检测断开连接的错误工具


基本上,您应该调用
read()
(并处理数据),直到它返回-1,此时表示客户端已断开连接。

如果使用套接字完成此操作,您可能需要检查类的各种实例方法,例如或


当然,这假定在此流上操作的方法可以访问套接字对象,而不仅仅是InputStream。

如果这是使用套接字完成的,则可能需要检查类的各种实例方法,例如或



当然,这是假设在这个流上操作的方法可以访问套接字对象,而不仅仅是InputStream。

我认为您的伪代码被破坏了。如果输入流为null,那么inputStream.available()将抛出一个NPE…感谢您指出这一点。应该是“inputstream不为null并且…”在这种情况下,我怀疑您现在的分支错误了。。。如果输入流为null或没有任何数据,为什么要处理它?正确,仍然是错误的。将修复。嗨,jbu,我希望你的代码正常工作。我想建议,既然这是一个社区网站,你会考虑一旦回答就留下问题。即使回想起来问题很明显,其他有类似/相同问题的人也将能够从解决问题的过程中学习。我认为您的伪代码被破坏了。如果输入流为null,那么inputStream.available()将抛出一个NPE…感谢您指出这一点。应该是“inputstream不为null并且…”在这种情况下,我怀疑您现在的分支错误了。。。如果输入流为null或没有任何数据,为什么要处理它?正确,仍然是错误的。将修复。嗨,jbu,我希望你的代码正常工作。我想建议,既然这是一个社区网站,你会考虑一旦回答就留下问题。即使问题在retrospect中很明显,其他有类似/相同问题的人也可以从问题解决过程中学习。当客户端断开连接时,Read返回-1。问题是我不想更改服务器中的现有代码,因为我没有编写它。我可以改变它,但我想知道,在我要求改变之前,没有其他方法可以改变它。更改将需要大量的回归测试。另外:我只是更改handleInputStream()方法。@jbu:好吧,我们对代码一无所知,但使用available()肯定不是检测断开连接的方法。老实说,我不记得上一次看到available()的有效用法是什么时候了。是的,available()的API我不清楚。我不确定什么“返回可以从该输入流读取(或跳过)的字节数,而不会被该输入流的方法的下一个调用方阻塞。”它的确切含义是什么。当客户端断开连接时,Read返回-1。问题是我不想更改服务器中的现有代码,因为我没有编写它。我可以改变它,但我想知道,在我要求改变之前,没有其他方法可以改变它。更改将需要大量的回归测试。另外:我只是更改handleInputStream()方法。@jbu:好吧,我们对代码一无所知,但使用available()肯定不是检测断开连接的方法。老实说,我不记得上一次看到available()的有效用法是什么时候了。是的,available()的API我不清楚。我不确定“返回可从该输入流读取(或跳过)的字节数而不被该输入流的方法的下一个调用方阻塞”的确切含义以及含义。