我正在尝试创建一个程序,它将直接从套接字获取数据,而不是使用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);
答案 0 :(得分:1)
HTTP/1.1有persistent connections。您正在读取该循环中的所有响应块,然后阻塞,直到服务器超时并关闭TCP连接。
顺便说一下,您没有向服务器发送请求,这就是您没有得到任何回报的原因。如果你想自己实现协议,请研究协议。
答案 1 :(得分: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();
}
}
}