2016-04-27 103 views
0

我想在android java代码一个TCP客户端。大多数工作正常。但我有一个问题。如果套接字已连接并且remeote主机关闭或网络关闭或其他事件,则socket.getinputstream始终阻塞。Android,Java,套接字,确定远程主机断开连接

我不知道套接字是否仍然连接。我在Objective-C编码,并在Objective-C我得到的事件,套接字强制关闭,我可以尝试重新连接。所以在目标c上,套接字跟踪状态。

在java中,套接字和输入流仍然连接或阻塞,即使套接字已关闭。我如何检查套接字是否仍然连接?

 @Override 
     protected Void doInBackground(String... params) { 
     try { 
        String host = params[0]; 
        int port = Integer.parseInt(params[1]); 
        SocketAddress sockaddr = new InetSocketAddress(host, port); 
        Socket socket = new Socket(); 
        socket.connect(sockaddr,5000); 
        socket.setSoTimeout(7000); 

        out = new PrintWriter(socket.getOutputStream(), true); 
        mBufferIn = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
        while (mRun) { 
         try { 
      ----->   mServerMessage = mBufferIn.readLine(); 
         }catch (Exception e){ 
          Log.d("my","hier3" + e.getMessage()); 
         } 
         if (mServerMessage.trim() != null) { 

           sender.messageReceived(s2); 

          }else{ 

          } 

         } 

        } 

       } catch (UnknownHostException e 

) { 

回答

0

如何检测如果远程对等体/插座已经关闭了连接一直answered here以及here问题。 基本上,答案建议你尝试从套接字读取,然后观察会发生什么(read()回报-1,或readLine()回报null或者你读的方法提高EOFException

相关问题