我有一个线程应该监听消息的确认并处理它们,但似乎线程永远不会收到确认。
以下是主题中的相关代码:
private class TcpReader extends Thread {
BufferedReader reader;
boolean running = false;
public TcpReader(BufferedReader reader)
{
this.reader = reader;
}
public void run() {
running = true;
while (running) {
try {
String line = reader.readLine();
logger.debug("TCP READER RECIEVED MESSAGE ["+ line + "]");
// Do stuff
} catch (Exception e) {
}
}
}
}
线程是在以下代码中创建的,它发生在另一个类中:
sock = new Socket(hostName, port);
out = new PrintWriter(sock.getOutputStream(), true);
isConnected = true;
BufferedReader reader =
new BufferedReader(new InputStreamReader(sock.getInputStream()));
tcpReader = new TcpReader(reader);
tcpReader.start();
变量在as成员变量中实例化:
Socket sock;
PrintWriter out;
BufferedReader in;
执行流程是我的服务器类重新收到一条消息,然后回复一个客户端应该接收的ACK。 但是,因为客户端不等待ack继续。单独的线程等待所有响应。
readline代码永远不会读取任何内容。
消息是从我的服务器发送的,他们的最后两个字符都是“\ r \ n”。
答案 0 :(得分:3)
是否从服务器传输了行尾字符,即它是否在另一端刷新输出流?您可以使用telnet
或简单的数据包嗅探器来检查发送的内容。
另一方面,running
可能应该标记为易变。
答案 1 :(得分:2)
如果Exception
引发readLine
,则不会记录任何内容。
答案 2 :(得分:0)
没有足够的信息。猜测你没有刷新输出缓冲区。
另请注意,您尚未指定字符编码。