繁体   English   中英

通过Java中的套接字发送图像(或二进制数据)

[英]Sending image (or binary data) over sockets in Java

我正在编写一个HTTP服务器,以便从头开始学习(尝试更深入地学习HTTP),并且已经使该服务器向客户端发送带有HTML的HTTP响应,而没有很多问题。

当我尝试通过电线发送二进制数据(例如JPEG图像)时,就会出现问题。 浏览器似乎无法正确解释它。 为此,我已将响应的MIME类型设置为image/jpeg ,并且正确的Content-Length仍然无法正确传输数据。

对此有些困惑,想知道我对Java中如何读取二进制数据的理解或方法是否不正确?

我正在执行的一般方法是将磁盘中的文件读取到FileInputStream ,然后将数据读取到1024字节缓冲区中。 当我读取缓冲区时,我正在将缓冲的数据写入DataOutputStream ,该输出具有客户端的套接字连接作为OutputStream 使用后,我将刷新并关闭数据。

我为HTTP响应生成主体的部分在这里:

        FileInputStream fis = new FileInputStream("www/server.jpg");
        byte[] buffer = new byte[1024];
        DataOutputStream dos = new DataOutputStream(this.clientSocket.getOutputStream());
        int read;
        while((read=fis.read(buffer)) >= 0) {
            dos.write(buffer, 0, read);
        }

        dos.flush();

        fis.close();
        dos.close();

我已经硬编码了几件事,但是我认为这通常可以解决我的问题。 因此,当我发出如下所示的HTTP请求时,收到以下响应:

在此处输入图片说明

在FireFox中,图像尝试渲染,但是我得到消息: 在此处输入图片说明

我要显示的图像是: 在此处输入图片说明

有人有想法么?

谢谢!

因此,@ rkosegi关于从curl下载文件的评论帮助我弄清了问题所在。 显然我在构造响应主体时不正确。 发生的是在HTTP实体标头之后的正文内容之前插入了新行。 在流送正文内容之前删除了此多余的换行符之后,我能够使浏览器正确解释数据。

天哪!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM