TCP客户端套接字未获得对接收器线程的侦听



以下代码无法从TCP服务器读取数据。我找不到这个问题。任何帮助都将不胜感激。

class Receive extends Thread {
public void run() {
while (true){
StringBuilder log = new StringBuilder();
String line = null;
BufferedReader bufferedReader = null;
try {
bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}
if(bufferedReader!=null){
while (true) {
try {
if (!((line = bufferedReader.readLine()) != null)) break;
} catch (IOException e) {
e.printStackTrace();
}
log.append(line);
}
Log.d("==> ", "data is " + line);
}
}
}
}

外部循环是不必要的,应该删除。但更重要的是,只有当readLine()返回一个null字符串,然后尝试记录该null时,才打破内部循环。

试试这个:

class Receive extends Thread {
public void run() {
try {
StringBuilder log = new StringBuilder();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line;
while ((line = bufferedReader.readLine()) != null) {
log.append(line);
}
Log.d("==> ", "data is " + log.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}

话虽如此,请注意,这种代码会从服务器读取整行代码,直到断开客户端的连接。并非所有协议都是基于线路的,或者在服务器发送数据后断开连接。如果你的服务器就是这样运作的,那就顺其自然吧。但对于服务器来说,这样做是不寻常的。在不知道你实际连接的是哪种服务器的情况下,很难说是否应该首先使用这种代码。

最新更新