[英]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请求时,收到以下响应:
有人有想法么?
谢谢!
因此,@ rkosegi关于从curl
下载文件的评论帮助我弄清了问题所在。 显然我在构造响应主体时不正确。 发生的是在HTTP实体标头之后的正文内容之前插入了新行。 在流送正文内容之前删除了此多余的换行符之后,我能够使浏览器正确解释数据。
天哪!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.