서버에 대한 연결이 완료되었지만 항상 inputstream에서 데이터를 읽을 수있는 것은 아니며 한 번만 읽을 수 있습니다.sslsocket은 inputstream에서 한 번만 읽습니다. 이유가 무엇입니까?
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();
}
이유를 모르겠습니다. 난 그냥 글로벌 필드를 사용하고 싶습니다. 항상 새로운 지역 필드를 사용하고 싶지 않습니다.
문제가 무엇인지, 아니면 글로벌 분야와 관련이 있는지 분명하지 않습니다. 'readLine()'에 null을 확인하고 읽음 루프를 종료해야합니다. 그리고 루프를 돌 때마다 새로운 버퍼링 된 판독기를 사용하지 않아야합니다. – EJP
@EJP'if (! TextUtils.isEmpty (str))'는 null에 대한 결과를 확인합니다. 항상 inputstream에서 데이터를 읽고 싶습니다. 나는 처음으로 읽을 수 있습니다. 그런 다음 서버에 내 keeplive 메시지를 보내고 서버가 클라이언트에 응답합니다. –
또한 빈 상태인지 검사하고 널 값을 얻으면 루프를 종료하지 않습니다. 단순히 비어있는 경우 ('''') 종료하지 않으려합니다. 당신이 가진 것이 충분하지 않습니다. 그 루프를 작성하는 일반적인 방법은'while ((str = reader.readLine())! = null)'입니다. – EJP