通过套接字Java下载图像

用户名

我正在尝试通过套接字从服务器下载图像。我的代码工作正常,但是当我下载图像时,大小正确但图像无法打开。我不知道我在做什么错。有什么建议吗?谢谢

     Socket socket = new Socket(servername, 80);
     DataOutputStream bw = new DataOutputStream(new DataOutputStream(socket.getOutputStream()));
    bw.writeBytes("GET "+filename+" HTTP/1.1\n");
    bw.writeBytes("Host: "+servername+":80\n\n");

    DataInputStream in = new DataInputStream(socket.getInputStream());


    OutputStream dos = new FileOutputStream("testtttt.jpg");
    int count;
    byte[] buffer = new byte[2048];
    while ((count = in.read(buffer)) != -1)
    {
      dos.write(buffer, 0, count);
      dos.flush();
    }
    dos.close();
    System.out.println("image transfer done");

    socket.close();     
   }
ug_

对于所有请求,您需要在\ n之前添加\ r,此外,还应将输出流刷新到套接字。

Socket socket = new Socket(servername, 80);
DataOutputStream bw = new DataOutputStream(socket.getOutputStream());
bw.writeBytes("GET "+filename+" HTTP/1.1\r\n");
bw.writeBytes("Host: "+servername+":80\r\n\r\n");
bw.flush();

此外,您还将在请求中获得一些HTTP响应标头。显然,这是您不需要的图像信息,您的回复将如下所示:

HTTP/1.1 200 OK
Date: Thu, 14 Nov 2013 18:39:47 GMT
Server: Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7
Accept-Ranges: bytes
ETag: W/"2956-1374616977919"
Last-Modified: Tue, 23 Jul 2013 22:02:57 GMT
Content-Type: image/png;charset=UTF-8
Content-Length: 2956

‰JPG....heres your image data

我只是写了这种方法来摆脱发送过来的HTTP标头。这个想法是在\ r \ n \ r \ n出现之前不写任何数据。该序列表示标头响应的结尾,而在此之前的任何数据都不是我们的图像。我知道有一种更清洁的方法可以完成,但是这种方式对我来说是非常快的:)

OutputStream dos = new FileOutputStream("c:\\testtttt.jpg");
int count;
byte[] buffer = new byte[2048];
boolean eohFound = false;
while ((count = in.read(buffer)) != -1)
{
    if(!eohFound){
        String string = new String(buffer, 0, count);
        int indexOfEOH = string.indexOf("\r\n\r\n");
        if(indexOfEOH != -1) {
            count = count-indexOfEOH-4;
            buffer = string.substring(indexOfEOH+4).getBytes();
            eohFound = true;
        } else {
            count = 0;
        }
    }
  dos.write(buffer, 0, count);
  dos.flush();
}
in.close();
dos.close();

您还可以在这里找到另一个类似的问题:通过套接字手动发送HTTP请求

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android Java:通过套接字接收图像

来自分类Dev

如何使用Java套接字HTTP / 1.1请求下载图像?

来自分类Dev

通过套接字发送图像

来自分类Dev

通过套接字发送图像时的Java OutOfMemory

来自分类Dev

通过套接字发送图像时的Java OutOfMemory

来自分类Dev

通过网络通过套接字发送图像

来自分类Dev

通过套接字发送和接收图像

来自分类Dev

无法通过套接字接收图像

来自分类Dev

通过套接字发送压缩的JPG图像

来自分类Dev

如何继续下载Java文件(套接字)

来自分类Dev

如何继续下载Java文件(套接字)

来自分类Dev

使用C语言中的套接字编程下载图像

来自分类Dev

在Java中通过套接字发送图像的有效方法

来自分类Dev

在Java中通过套接字发送时,JPG图像已损坏或损坏

来自分类Dev

通过套接字将屏幕快照从Java发送到CPP-接收图像问题

来自分类Dev

通过Java中的套接字发送对象

来自分类Dev

通过套接字发送可执行Java

来自分类Dev

通过套接字的Java TCP通信

来自分类Dev

通过Java中的套接字发送链表

来自分类Dev

通过Java套接字发送对象

来自分类Dev

通过Java套接字返回多个值

来自分类Dev

java:通过套接字发送方法

来自分类Dev

通过套接字发送可执行Java

来自分类Dev

通过套接字写没有ImageIO的图像

来自分类Dev

通过套接字发送base64编码图像

来自分类Dev

通过套接字发送pil图像而不保存python

来自分类Dev

如何使用ZeroMQ通过TCP套接字发送PNG图像?

来自分类Dev

通过套接字发送图像无法正常接收

来自分类Dev

通过套接字发送base64编码图像