仅使用Socket类

时间:2015-12-18 03:37:28

标签: java sockets

我正在尝试仅使用Socket类在Java中编写HTTP代理。我曾尝试先构造一个,我通过写入套接字的输出流成功发送请求但是我很难读取响应。我进行的研究表明我应该使用输入流并逐行读取,但我无法使用此方法成功读取任何网页。对于我可以从这里去哪里,有人会有任何建议吗?

我的代码实际上使用字节缓冲区来读取输入流,以便以字节为单位读取页面:

    InputStream input = clientSocket.getInputStream()
    byte[] buffer = new byte[48*1024];
    byte[] redData;
    StringBuilder clientData = new StringBuilder();
    String redDataText;
    int red;
       while((red = input.read(buffer)) > -1) {
           redData = new byte[red];
           System.arraycopy(buffer, 0, redData, 0, red);
           redDataText = new String(redData, "UTF-8");
           System.out.println("Got message!! " + redDataText);
           clientData.append(redDataText);
       }

1 个答案:

答案 0 :(得分:-1)

如果您想要一种按行读取InputStream的方法,可以使用此方法:

    BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(input, "UTF-8"));
    String line;
    StringBuilder clientData=new StringBuilder();
    while ((line=bufferedReader.readLine()) != null)
    {
        clientData.append(line);
    }

除非您事先确定它包含纯文本(而不是二进制数据),否则必须小心不要以这种方式读取InputStream。

BTW:为了提高效率,我建议您根据最终大小预先设置初始大小的clientData(如果没有,它将从默认大小10开始,需要重新调整大小更多次)。