2011-07-04 41 views
0

我有我需要确认服务器端套接字是否关闭连接的场景。因此,我正在检查if(in.read()== - 1)是否为true,这意味着服务器端关闭了连接。 但问题是,如果它不阻止,因为它阻止了call.i需要这样一个解决方案,我可以在特定时间读取非阻塞或在服务器端关闭连接时取消读取。 我正在创造像InputStream Non Blocking读取操作

socket = new Socket(); 
       // if server is not available 3 seconds blocking call other wise Exception 
       socket.connect(new InetSocketAddress(serverAddress , serverPort),3000); 

任何帮助,将不胜感激。

问候, 阿米尔

+0

请发布您的代码,因为几乎不可能知道您在尝试做什么而不知道如何打开连接到服务器。即你使用'HttpClient','URLConnection',原始套接字等? –

回答

0

假设这是对TCP,你尝试过使用myClientSocket.isClosed()

+0

它总是让我失望。 –

+0

这不是一个解决方案。它不会告诉你对方是否关闭了连接。它告诉你是否*你*关闭了连接。 – EJP

+0

是的EJP是对的,我没有控制server.so我不能强制关闭服务器。 –

2

但问题是,如果它不是它 阻止这里,因为它阻止呼叫。

这不是唯一的问题。还有一个更大的问题:如果有数据到达,它将丢弃一个字节的数据。你当然不能那样做。

你需要的是定时读取。见Socket.setSoTimeout()

+0

我不能满足这个答案。 'setSoTimeout()'隐藏得非常好:/ – Graeme