-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

raw ソケットを使用して 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 に答える