有关使用HTTP协议传输二进制文件

HTTP协议是基于字符(ASCII)的,当Content-Type项为text/xml,则内容是文本格式;当二进制格式时,Content-Type项为image/gif,就是了。例如,浏览器请求一张图片的数据包信息:

1、请求消息:

2、响应消息:

下面是二进制的数据区

由上可知,http协议中content中可以是纯二进制的。

通常上的理解,http协议中请求、相应都是以ascii字符方式传输,如果要传输二进制需要经过BASE64或MIME等编码(因为HTTP协议pop3、smtp邮件协议都是针对文本的,而FTP支持传输二进制数据,即不需要经过编码转换成字符型数据)

如果直接使用http传输二进制(不经过base64编码),可能会造成一下问题:

1) 不知道传输字节的具体长度,如传输的int类型,将int类型之间转为char以后,丢失掉了长度的信息,如数字1234567,本来只有4个字节,但是转化成文本的“1234567”是有7个字节。在int类型的时候固然好办,但是一个数组的时候,经过转化以后,在转化回来就很麻烦了。

2) 对于一些数字,二进制传输Server是没法处理的。如int 1,二进制数据是0x00000001,按字节传输的时候,client能够正常发送,但是libevent收到以后,在抛给libevent_http层是,会把数据截断,前两位0x00是字符串的停止符。

时间: 2024-10-10 06:05:35

有关使用HTTP协议传输二进制文件的相关文章

carchive网络传输二进制文件I6B

网络传输二进制文件,如果你对二进制文件的读写不懂,网络上传输二进制文件更不懂,这里包括音频,视频文件,图片文件等.研读这个例子是不错的选择,网络传输多个二进制文件.下载下来后可直接运行,测试通过的.点载下载下载地地:由<网络通信编程实用案例精选>配套源码改写而来,原先的例子只能传文本文件. http://weibo.com/p20180109p/1001604189534500829644邮本窗MXW味2D胺叹叹掩 http://weibo.com/p20180109p/10016041910

TCP协议传输大文件读取时候的问题

TCP协议传输大文件读取时候的问题 大文件传不完的bug 我们在定义的时候定义服务端每次文件读取大小为10240, 客户端每次接受大小为10240 我们想当然的认为客户端每次读取大小就是10240而把客户端的读下来的文件想当然大小每一次都加上10240 而实际上服务端发送文件send每次发送不一定是一次性把10240的文件传送完,可能分了好几次进行发送至缓冲区这我们实际文件大小就不一定是10240 解决办法: 1.对于每次服务端所发送的文件内容及大小都发送给客户端,让客户端一一对应读取 2.实时

如何确保TCP协议传输稳定可靠?

TCP,控制传输协议,它充分实现了数据传输时的各种控制功能:针对发送端发出的数据包确认应答信号ACK:针对数据包丢失或者出现定时器超时的重发机制:针对数据包到达接收端主机顺序乱掉的顺序控制:针对高效传输数据包的滑动窗口控制:针对避免网络拥堵时候的流量控制:针对刚开始启动的时候避免一下子发送大量数据包而导致网络瘫痪的慢启动算法和拥塞控制. 此外,TCP作为一种面向有连接的控制传输协议,只有在确认对端主机存在时才会发送数据,从而可以控制通信流量的浪费. TCP通过序列号.超时重传.检验和.流量控制.

java 25 - 4 网络编程之 UDP协议传输思路

UDP传输 两个类:DatagramSocket与DatagramPacket(具体看API) A:建立发送端,接收端. B:建立数据包. C:调用Socket的发送接收方法. D:关闭Socket. E:发送端与接收端是两个独立的运行程序. UDP传输-发送端思路 UDP发送数据: A:创建Socket发送端对象 B:创建数据报包(把数据打包) C:调用Socket对象发送数据报包 D:释放资源(底层是IO流) UDP传输-发送端代码 1 public static void main(Str

自己动手写RTP服务器——用RTP协议传输TS流

上一篇文章我们介绍了关于RTP协议的知识,那么我们现在就自己写一个简单的传输TS流媒体的RTP服务器吧. 预备知识 关于TS流的格式:TS流封装的具体格式请参考文档ISO/IEC 13818-1.这里我们只需要了解一些简单的信息就好.首先TS流是有许多的TS Packet组成的,每个TS Packet的长度固定为188 bytes,每个packet都是以sync_byte:0x47开头. MTU(Maximum Transmission Unit): 最大传输单元.是指一种通信协议的某一层上面所

如何将TS源流重新封装并通过P2P协议传输在安卓终端和苹果终端播放

什么是TS流 TS流(TransportStream)即在MPEG-2系统中,由视频,音频的ES流和辅助数据复接生成的用于实际传输的标准信息流称为MPEG-2传送流.根据传输媒体的质量不同,MPEG-2中定义了两种复合信息流:传送流(TS)和节目流(PS:ProgramStream). 也可以从另外一个层面来理解TS流. TS是MPEG2中提出的一种流媒体的封装格式,适合流媒体播放.在MPEG2中支持了2种媒体播放格式:本地播放的PS流(program Stream),网络播放的流媒体格式TS流

从RTSP协议传输的H264视频流中取出每一个帧属于I、P、B中的哪一种帧

本文地址:http://www.cnblogs.com/herbix/p/4270035.html RTSP是一个控制协议,其中的数据是用RTP传输的.RTP使用了UDP,每个UDP包的内容区(没有UDP头)都包含以下的几个部分: RTP_FIXED_HEADER 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

自定义协议传输

step1:协议格式 step2:根据协议定义出对应的模型 1 package com.superb.mina.entity; 2 3 import java.io.ByteArrayOutputStream; 4 import java.io.DataOutputStream; 5 import java.io.IOException; 6 import java.io.Serializable; 7 import java.nio.charset.Charset; 8 9 /** 10 *

java 25 - 4 网络编程之 UDP协议传输的代码优化

UDP协议的输出端: 1 /* 2 UDP发送数据: 3 A:创建Socket发送端对象 4 B:创建数据报包(把数据打包) 5 C:调用Socket对象发送数据报包 6 D:释放资源(底层是IO流) 7 */ 8 public class NewSend { 9 10 public static void main(String[] args) throws IOException { 11 12 // A:创建Socket发送端对象 13 DatagramSocket ds = new Da