2016-04-27 16 views
0

私はアンドロイドのJavaでTCPクライアントをコーディングしようとしています。ほとんどの場合、大丈夫です。しかし、私は1つの問題があります。ソケットが接続されていて、remeoteホストがシャットダウンしたり、ネットワークが停止したりすると、socket.getinputstreamはブロックを維持します。Android、Java、ソケット、リモートホストの接続を切断する

ソケットがまだ接続されているかどうかわかりません。私は客観的な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を上げる(何が起こるかを観察しようとすることを示唆している。

関連する問題