部分与服务器的连接已完成,但不能始终从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