-2

我做了一些研究,还检查了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());
}
4

2 回答 2

2

使用原始套接字执行 HTTP GET 比必要的复杂得多。我推荐使用像 Apache 那样的 HTTP 客户端,或者你可以使用 java.net.URLConnection。请参阅如何在 Java 中执行 HTTP GET?使用 java.net.URLConnection 触发和处理 HTTP 请求

于 2012-09-27T07:02:41.403 回答
0

您的代码没有任何明显的缺陷。如果你得到一个零长度的文件,那是因为你没有发送任何东西。

顺便说一句,您不需要ByteArrayOutputStream.您可以将阅读的所有内容直接写入FileOutputStream.节省时间和空间。

于 2012-09-27T10:08:13.727 回答