- 论坛徽章:
- 0
|
软件设计中常用技术
第二种,通信包传送技术
介绍
在使用TCP socket等在两个进程间传送数据时,我们会遇到双方如何得知一个包到什么地方结束. 因为TCP socket并不是发一个包,对方就会收到同样大小的包的, TCPsocket是一种流, 它只保证流内内容的有序, 不保证流长度的一致.可能一发多收或是一次收到多次发的包。另外TCP在数据被接收后会从接收缓冲中删除, 所以如果不想自己管理缓冲区的话, 还是每次只接收正确的长度好
在通信中常用的有两种包格式,一种是定长包, 另一种是变长包
定长包就是每次发送时包长度都是固定的,接收方只要接收这么长的包就可以了。
变长包就是每次发送的包长度都是可变的, 由于TCP是形格式,接收方必须知道此次接收要接收多长的包
它们的区别只是在于每次发的包长度是可变还是定长, 没有定义定长包包内数据必须是定长, 有时也使用定长包传送可变长内容, 但是如果包长度不够的话那么要填充一些值, 并有可以得到包长度信息的标志 ,包最大长度不会超过双方规定长度
技术:socket的发送与接收,变长包格式
socket的发送与接收,这是基本的socket编程,这里不再多说
变长包格式:
一般通信使用的变长包格式是
2个字节的short 包内容
前面两个字节保存包全部长度,接收方接收时先接收两个字节, 得知包大小, 然后再根据包大小从socket中读出包内容
使用两个字节的原因是unsigned short已可以表示65535, 这在多数情况下都已够用, 当然你也可以自己定义这个, 没有标准说一定要是一个unsigned short类型
定长包格式随着注意就是有时包长度不够的话, 要双方协议好
包的收发:
定长包收发: 每次发送指定长度的包 , 如果包长度不够那么填充
变长包收发 发送时先发送包长度, 再发送包内容 ,接收时先接收包长度,再根据包长度接收包内容 |
|