我做了一些研究,还检查了stackoverflow的答案。但是我无法正确使用我的代码,请帮忙。代码可以运行,但我不能得到图像,它显示0kb。
Socket socket = new Socket(addr, port);
byte [] buffer = new byte[1024];
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
writer.println("GET " + url.getFile() + " HTTP/1.0\r\n");
writer.println("HOST:" + url.getHost() + "\r\n");
writer.println("\r\n");
DataInputStream in = new DataInputStream(socket.getInputStream());
ByteArrayOutputStream out = new ByteArrayOutputStream();
int n = 0;
while (-1!=(n=in.read(buffer)))
{
out.write(buffer, 0, n);
}
out.close();
in.close();
byte[] response = out.toByteArray();
FileOutputStream fos = new FileOutputStream("0.jpeg");
fos.write(response);
fos.close();
}catch (Exception e){
System.out.println(e.toString());
}
答案 0 :(得分:2)
使用原始套接字执行HTTP GET比必要复杂得多。 我建议使用像Apache那样的HTTP客户端,或者你可以使用java.net.URLConnection。请参阅How do I do a HTTP GET in Java?或Using java.net.URLConnection to fire and handle HTTP requests
答案 1 :(得分:0)
您的代码没有任何明显的缺陷。如果你得到一个零长度的文件,那是因为你没有发送任何东西。
顺便说一下,你不需要ByteArrayOutputStream.
你可以把你直接读到的所有内容写到FileOutputStream.
,节省时间和空间。