0

サーバーへの接続の一部は完了していますが、常に入力ストリームからデータを読み取ることができるわけではなく、一度しか読み取ることができません。

    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();
}

これを試してみると、常に入力ストリームから読み取ることができます。

    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();
}

理由はわかりません。グローバルフィールドを使いたいだけです。常に新しいローカル フィールドを使用する必要はありません。

4

1 に答える 1

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

それをループから外してください。そのステートメントは、接続に対して 1 回だけ実行できます。

于 2016-09-30T07:32:57.937 に答える