1

我正在尝试创建一个程序,该程序将直接从套接字获取数据,而不是使用 HttpURLConnection 或 HttpClient。使用套接字将给我更多的自由来操作数据以匹配需求。我希望使用套接字,我可以保留与每个块一起发送的块头。以下是我的代码来实现这一点。不幸的是,即使代码运行没有任何错误,它也至少运行了 40 秒才停止。此外,即使我检查了程序已连接到服务器,我也没有从服务器获得任何 InputStream。

    Socket socket = new Socket(hostAddr, port);
    InputStream in = socket.getInputStream();
    InputStreamReader isr = new InputStreamReader(in);
    char[] streamBuff = new char[8192];
    StringBuilder receivedData = new StringBuilder();
    int count = 0;
    while((count = isr.read(streamBuff)) > 0)
    {
        receivedData.append(streamBuff, 0, count);
    }
    System.out.println(receivedData);
4

2 回答 2

1

HTTP/1.1具有持久连接。您正在读取该循环中的所有响应块,然后阻塞直到服务器超时并关闭您的 TCP 连接。

编辑0:

顺便说一句,您没有向服务器发送*请求*,这就是您没有得到任何回报的原因。如果您想自己实现它,请研究该协议。
于 2012-06-26T18:24:38.680 回答
0

您首先需要发出请求,GET 或 POST。这是一个示例来展示如何使用openStream()然后阅读InputStream

public class DateWala {

    public static void main(String[] args){

        try {
            URL url = new URL("http://www.google.com");
            InputStream is = url.openStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);

            String s = null;

            while ((s=br.readLine())!=null){
                System.out.println(s);
            }

        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}
于 2012-06-26T18:45:16.977 回答