网络编程思想

网络编程:要以多线程异步的方式来考虑问题。

比如我用tcp发送数据包的时候:一般定义包头,和包体的方式

包头中一般包括:

包头的特殊字段(magic):用来指明包头的开始(定义好之后,包头一定要是固定长度,又用取到完整长度的包头)。主要是防止粘包。

比如在接受方读取数据的时候,一个半的数据包己经到达,一个通过特殊字段可以判断我数据开始就是包头,第二个是我可以得到后边的半包的开始。如果我包头和包体封装到一块数据长度就不确定,我要是全部取出来,岂不是认为我这一个半的数据包就是一个数据包。解析就是有问题的

sequence字段:这个用于标识发送的数据包的序列号

比如我异步多线程方式发送数据,每一个数据包有一个sequence,在我发送过去到服务器之后,由于一般我的每个包的功能不一样,解析不同,执行的功能不同,所以我反馈给前端的信息的时间先后不一样,这样我怎么知道我这个反馈信息是我那个请求的反馈。就是通过sequence

在比如我同一个命令控制字段,发送了多个(3个)请求数据包,由于服务器反馈回你的信息的系列不确定,假如服务器解析两个正确一个不正确,反馈回去之后,光有命令控制字段,也不能判断是那个正确,那个错误

命令控制字:用来标识这段数据的功能用途。

包体的信息长度:用于指明包体的长度。

一般情况下是包体和包头一块发送,接收的时候(先读包头,正确,再读包体),是先读取完整的包头(因为的固定的长度,所以可以取到完整的包头)。解析包头里边的包体长度,和crc校验值。然后通过包体长度。在读取包体,crc校验值的比较,判断包体是否正确,如果不正确,就直接丢弃。如果正确,再按照获得的包体长度读取完整的包体信息。

包体信息的crc校验值字段:主要是为了保证我传输过来的数据是正确的。传输过来的数据在本地做一个crc校验,然后和这个校验值比较,如果一样,说明数据是正确的。

自己认为重要的包体的信息:自己定义



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值