Java程序在Socket

时间:2016-11-03 17:27:03

标签: java sockets

    Socket s;
    try {
        s = new Socket(InetAddress.getByName("stackoverflow.com"), 80);

        PrintWriter pw = new PrintWriter(s.getOutputStream());
        pw.println("GET / HTTP/1.1");
        pw.println("Host: stackoverflow.com");
        pw.println();
        pw.flush();

        BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
        String t;

        while((t = br.readLine()) != null) 
            System.out.println(t);

        br.close(); 

    } catch (IOException ex) {
        Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
    }

我认为While循环中的问题但是我不知道如何在获取所有数据后停止它。

1 个答案:

答案 0 :(得分:0)

我在这个问题中找到了答案。 https://stackoverflow.com/a/1577833/4028581

  

您的问题是内容编码“chunked”。当在响应开始时不知道从Web服务器请求的内容的长度时使用此方法。它基本上由发送的字节数组成,后跟CRLF,后跟字节。响应的结束由您看到的确切顺序发出信号。 Web服务器现在正在等待您的下一个请求(这也称为“请求管道传输”)。

     

您有几种可能性:

     

1-使用HTTP版本1.0。这将导致Web服务器在完全发送响应后自动关闭连接。

     

2-发送请求时指定“连接:关闭”标题。这也将关闭连接。

     

3-解析内容编码“chunked”正确并简单地将其视为响应现在已完成 - 它是什么。

     

作者:Bombe