繁体   English   中英

使用BufferedReader(套接字)读取多行

[英]Read multiple lines using BufferedReader (Socket)

我已经在此处阅读了关于stackoverflow的一些线程以及一些教程,但是我没有找到解决问题的方法。

我有连接到服务器的Java客户端,然后恰好将一行发送到该服务器,然后得到2或3行作为响应。

这是我的代码:

public static void main(String[] args) {
    String message;
    String response;

    try {
        BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in));
        Socket clientSocket = new Socket(hostname, port);
        DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
        BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        message = inFromUser.readLine();
        outToServer.writeBytes(message + '\n');

        // here my program "freezes"
        while ((response = inFromServer.readLine()) != null) {
          System.out.println("response: " + response);
        }
        clientSocket.close();
    } catch (UnknownHostException e) {
        System.out.println("Unknown Host");
    } catch (IOException e) {
        System.out.println("IO Exception");
    }
}

我的问题是,我可以读取响应的每一行,但是我的程序不会退出。 clientSocket.close(); 永远不会被调用。 我究竟做错了什么?

大概您的服务器没有关闭连接-因此,阅读器的基础流没有关闭...在任何时候服务器都可以发送更多信息。 readLine()仅在关闭流后才返回null ,即绝对不会再有数据。

现在我们在这里对协议一无所知,但是如果预期的行为是客户端将不发送任何更多信息,并且服务器将关闭连接,则该错误位于服务器中。 如果协议指出服务器将保持连接打开,则该错误位于客户端代码中,您需要确定如何检测数据结束(或发送某种确认,这将导致服务器关闭连接) , 管他呢)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM