java socket下载图片

时间:2012-09-27 06:51:33

标签: java sockets binary

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

2 个答案:

答案 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.,节省时间和空间。