2016-09-30 6 views
0

サーバーへの接続の一部が完了しましたが、入力ストリームからデータを読み取ることができず、一度しか読み取ることができません。sslsocketは入力ストリームから一度だけ読み込みます、なぜですか?

public void startSSLClient() throws IOException { 
    inf = new Inflater(); 
    mSocketBufferReader = new BufferedReader(new InputStreamReader(mSslSocket.getInputStream())); 
    new Thread() { 
     boolean online =false; 
     String s; 
     @Override 
     public void run() { 
      try { 
       while (true) { 
        String str = mSocketBufferReader.readLine(); 
        if (!TextUtils.isEmpty(str)) { 
         Logger.e("PacketReader","process packet : "+str); 
        } 
       } 
      } 
      catch (Exception e) { 
       System.out.println("Error: " + e); 
      } 
     } 
    }.start(); 
} 

これを試してみると、常にinputstreamから読み取るように動作しています。

public void startSSLClient() throws IOException { 
    inf = new Inflater(); 

    new Thread() { 
     boolean online =false; 
     String s; 
     @Override 
     public void run() { 
      try { 
       while (true) { 
        BufferedReader mSocketBufferReader = new BufferedReader(new InputStreamReader(mSslSocket.getInputStream())); 
        String str = mSocketBufferReader.readLine(); 
        if (!TextUtils.isEmpty(str)) { 
         Logger.e("PacketReader","process packet : "+str); 
        } 
       } 
      } 
      catch (Exception e) { 
       System.out.println("Error: " + e); 
      } 
     } 
    }.start(); 
} 

私は理由を知らない。私はグローバルフィールドを使いたいだけです。私は常に新しいローカルフィールドを使用したくありません。

+0

あなたの問題は何か、それともグローバルな分野とは何が関係しているのか不明です。 'readLine()'の結果を確認し、読み込みループを終了する必要があります。また、ループのたびに新しいバッファ付きリーダーを使用するべきではありません。 – EJP

+0

@EJP 'if(!TextUtils.isEmpty(str))'がnullの結果をチェックしています。私は常にinputstreamからデータを読み込みたい。私は初めて読むことができます。それから私は私のkeepliveメッセージをサーバーに送り、サーバーはクライアントに応答しました。 –

+0

また、空であるかどうかをチェックし、nullを受け取った場合はループを終了しません。単に空の場合( '' '')には、終了したくありません。あなたが持っているものは十分ではありません。そのループを書く普通の方法は 'while((str = reader.readLine())!= null)'です。 – EJP

答えて

0
BufferedReader mSocketBufferReader = new BufferedReader(new InputStreamReader(mSslSocket.getInputStream())); 

これをループから取り除きます。この文は、接続に対して1回だけ実行できます。

+0

ええ、あなたは正しいです、そして、これは私の最初のコードです。しかし、それはinputstreamから一度しか読むことができません。メッセージが来て、bufferReaderは読むことができません。 –

+0

@DrDemonどのようなメッセージですか? JDKはそのようなメッセージを出力しません。 – EJP

関連する問題