从服务器到客户端的多个println

时间:2011-09-01 17:18:37

标签: java sockets

我目前遇到服务器 - 客户端互动问题。

我需要读取服务器发送给客户端的多个println,这可以工作但是在读完行之后它似乎不会再回到等待客户端用户输入新命令

这是打开流的方法

private void openStreams() throws IOException
{
    final boolean AUTO_FLUSH = true;
    is = socket.getInputStream();
    os = socket.getOutputStream();
    fromServer = new BufferedReader(new InputStreamReader(is));
    toServer = new PrintWriter(os, AUTO_FLUSH);
}

这是发送请求然后将其读出的方法

private void sendRequest() throws IOException
{
        String request;
        String reply;
        Scanner sc = new Scanner(System.in);

        request = sc.nextLine();
        while(!(request.equals(CLIENT_QUITTING)))
        {
            toServer.println(request);

            while((reply = fromServer.readLine()) != null)
            {
                System.out.println(reply);
            }

            request = sc.nextLine();
        }  
    }

它似乎陷入了内在的循环

有人能指出我出错的方向吗?

1 个答案:

答案 0 :(得分:1)

接收代码需要知道何时停止阅读文本,何时需要下一个命令。

例如,简单邮件传输协议(SMTP)定义邮件正文由多行组成,行.\r\n标记结尾。

另一种可能性是HTTP为 chunked encoding 做了什么(带有字节,但概念是相同的)。它将身体作为一系列块发送。每个块由长度字段和数据长度字节长)组成。在你的情况下,你可能会发送接收者可能期望的行数,然后是行本身。