我附上以下代码。我能够写数据。但是我无法读取数据。但是在网络中,我可以看到客户端正在发送数据。 BufferedReader.readLine()不返回,并且在超时后读取超时即将到来。请在这里检查并帮助我。谢谢
@Override
public void run()
{
Log.i(LOG_TAG,"run() called");
try
{
createHandler();
sslSocket.setSoTimeout(1000*30);
bufferedWriter = new BufferedWriter(new OutputStreamWriter(sslSocket.getOutputStream()));
bufferedReader = new BufferedReader(new InputStreamReader(sslSocket.getInputStream()));
writeData(getInitialStateData());
Log.i(LOG_TAG,"written to output stream");
Log.d(LOG_TAG,"before reading bufferedReader and input shutdown status is "+sslSocket.isInputShutdown());
String inputLine = bufferedReader.readLine();
Log.d(LOG_TAG,"Ravi after reading bufferedReader and inputLine is "+inputLine);
while(inputLine != null)
{
Log.e(LOG_TAG,"Ravi run(), data == "+inputLine);
Message message = new Message();
message.obj = inputLine;
receiverHandler.handleMessage(message);
inputLine = bufferedReader.readLine();
}
}
catch (Exception e)
{
Log.e(LOG_TAG,"Exception in run() "+e);
}
}
BufferedReader.readLine()
将读取一行,直到遇到\n
或\r
或两者。如果您的信息流没有发送这些信息,它将继续尝试读取它。尝试使用read
方法,并将char数组作为保存信息的缓冲区传递并将其附加到字符串:
@Override
public void run() {
Log.i(LOG_TAG,"run() called");
try (bufferedWriter = new BufferedWriter(new OutputStreamWriter(sslSocket.getOutputStream()));
bufferedReader = new BufferedReader(new InputStreamReader(sslSocket.getInputStream()))) {
createHandler();
sslSocket.setSoTimeout(1000*30);
writeData(getInitialStateData());
Log.i(LOG_TAG,"written to output stream");
Log.d(LOG_TAG,"before reading bufferedReader and input shutdown status is "+sslSocket.isInputShutdown());
int read = 0;
char[] buffer = new char[1024];
StringBuilder sb = new StringBuilder();
while((read = bufferedReader.read(buffer, 0, buffer.length)) > 0 {
Log.e(LOG_TAG,"Ravi run(), data read == " + read);
sb.append(Arrays.copyOf(buffer, read));
}
Message message = new Message();
message.obj = sb.toString();
receiverHandler.handleMessage(message);
} catch (Exception e) {
Log.e(LOG_TAG,"Exception in run() "+e);
}
}