サーバーへの接続の一部が完了しましたが、入力ストリームからデータを読み取ることができず、一度しか読み取ることができません。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();
}
私は理由を知らない。私はグローバルフィールドを使いたいだけです。私は常に新しいローカルフィールドを使用したくありません。
あなたの問題は何か、それともグローバルな分野とは何が関係しているのか不明です。 'readLine()'の結果を確認し、読み込みループを終了する必要があります。また、ループのたびに新しいバッファ付きリーダーを使用するべきではありません。 – EJP
@EJP 'if(!TextUtils.isEmpty(str))'がnullの結果をチェックしています。私は常にinputstreamからデータを読み込みたい。私は初めて読むことができます。それから私は私のkeepliveメッセージをサーバーに送り、サーバーはクライアントに応答しました。 –
また、空であるかどうかをチェックし、nullを受け取った場合はループを終了しません。単に空の場合( '' '')には、終了したくありません。あなたが持っているものは十分ではありません。そのループを書く普通の方法は 'while((str = reader.readLine())!= null)'です。 – EJP