字节流边界的确定方法
2005-11-04 13:49
218 查看
我们知道TCP是一个面向字节流的,当通过其传输数据时必须确定字节流的边界以区分不同的数据记录。
常用方法:
1.带内特殊终止符
常用的方法是使用回车符和换行符(CR+LF)来分隔每一记录,这种方法需要做转义处理,扫描整个数据寻找每个记录的位置。典型应用是ftp,smtp,http。
2.显式长度
每个记录前加长度前缀用来表示记录的长度。
举例:
#define MAX_MESG_DATA (1024 - 2*sizeof(long)) /*消息体长度*/
#define MESGHDRSIZE (sizeof(struct mesg_s) - MAX_MESG_DATA) /*消息头长度*/
typedef struct mesg_s{
long mesg_len; /*消息体的长度*/
long mesg_type; /*可以是优先级,也可以是类型*/
char mesg_data[MAX_MESG_DATA]; /*消息体*/
}mesg_t;
/*发送时:发送消息头+消息体*/
/*接受时:先接收消息头,根据消息头中的mesg_len读出消息体*/
3.每次连接一个记录
关闭与对方的连接来表示一个记录结束。即每个记录都要创建一个连接。典型应用是HTTP协议。
参考资料:
<<UNIX网络编程 卷2 进程间通信>> W.Richard Stevens
sim. 2005.11.2
常用方法:
1.带内特殊终止符
常用的方法是使用回车符和换行符(CR+LF)来分隔每一记录,这种方法需要做转义处理,扫描整个数据寻找每个记录的位置。典型应用是ftp,smtp,http。
2.显式长度
每个记录前加长度前缀用来表示记录的长度。
举例:
#define MAX_MESG_DATA (1024 - 2*sizeof(long)) /*消息体长度*/
#define MESGHDRSIZE (sizeof(struct mesg_s) - MAX_MESG_DATA) /*消息头长度*/
typedef struct mesg_s{
long mesg_len; /*消息体的长度*/
long mesg_type; /*可以是优先级,也可以是类型*/
char mesg_data[MAX_MESG_DATA]; /*消息体*/
}mesg_t;
/*发送时:发送消息头+消息体*/
/*接受时:先接收消息头,根据消息头中的mesg_len读出消息体*/
3.每次连接一个记录
关闭与对方的连接来表示一个记录结束。即每个记录都要创建一个连接。典型应用是HTTP协议。
参考资料:
<<UNIX网络编程 卷2 进程间通信>> W.Richard Stevens
sim. 2005.11.2
相关文章推荐
- 测试相关理解(三)—边界值分析方法
- 根据ip地址确定国家的方法
- 字节流转换为对象的方法
- 在UIAlterView的代理方法中 点击确定时 添加一个UIView到[[UIApplication sharedApplication].keyWindow上只出现了0.5秒左右就消失的问题
- Spring MVC确定目标方法POJO类型入参的流程
- 一种用于确定查询结果的方法与设备
- 确定是否安装IIS服务的方法
- [唐胡璐]测试用例设计 - 边界值分析方法
- 垂直居中-父元素高度确定的多行文本(方法二)
- linux下确定ethN与物理网卡关联关系的方法
- 边界扩充方法函数(cvCopyMakeBorde…
- TreeSet方法之一 当向TreeSet中添加Person对象 续 确定按哪个属性排序
- Java基础---Java---IO流-----LineNumberReader方法及原理、自定义一个LineNumberReader、字节流、图片复制、mp3复制、
- 传统方法左边接口,右边实现类,spring如何通过接口来调用类,又如何去确定是哪一个类
- Window对象的常用方法中带有提示信息、确定和取消按钮的对话框
- 识别系统映像快速确定Win8是不是正式版的方法
- Java笔记 – 泛型 泛型方法 泛型接口 擦除 边界 通配符
- 边界值方法案例
- 调用OpenCV的cvFindContours方法获取图像边界
- 上拉下拉电阻的一般确定方法