为什么这个缓冲读卡器没有接收到任何数据?

时间:2009-04-29 15:28:27

标签: java sockets

我有一个线程应该监听消息的确认并处理它们,但似乎线程永远不会收到确认。

以下是主题中的相关代码:

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”。

3 个答案:

答案 0 :(得分:3)

是否从服务器传输了行尾字符,即它是否在另一端刷新输出流?您可以使用telnet或简单的数据包嗅探器来检查发送的内容。

另一方面,running可能应该标记为易变。

答案 1 :(得分:2)

如果Exception引发readLine,则不会记录任何内容。

答案 2 :(得分:0)

没有足够的信息。猜测你没有刷新输出缓冲区。

另请注意,您尚未指定字符编码。