hook socket系列API 遇到分包不知道怎么处理
展开全部
这个东西我做过,是直接修改网页数据的。
你说的情况,可以直接在返回数据后判断是否
HTTP/1.1 200 OK
如果是,那就解析文件头,里面包含有长度,编码类型,传输类型,是否GZIP压缩,是否是chunked编码等,
如果没有Content-Length,那就判断是否是chunked,都没有,那直接就检测Connection是否是close。
如果是,那数据就到头了,然后就合并所有接收到的数据,返回给调用方即可。
我的框架是,
建立socket句柄的数据映射,可以是list,map,随意,因为是多线程的,这点是必须的。
结构大致如下
myrevc_
{
申请新映射或者,如果有,就根据调用方提供的缓存大小依次返回数据,offset控制好即可,数据返回完毕就删除映射,。
调用原始recv,
判断网页类型,超文本协议,获取文件长度,编码类型等等。
这里不考虑大文件,所以循环调用原始recv,读取出所有数据,直到结束,然后合并,解码,dosameting。
返回调用方剩余的缓存区大小。
}
WSARecv大同小异,OVERLAPPED也不影响,
因为是很早以前的东西,不是用vc写的,所以源码就不贴出来了。
你说的情况,可以直接在返回数据后判断是否
HTTP/1.1 200 OK
如果是,那就解析文件头,里面包含有长度,编码类型,传输类型,是否GZIP压缩,是否是chunked编码等,
如果没有Content-Length,那就判断是否是chunked,都没有,那直接就检测Connection是否是close。
如果是,那数据就到头了,然后就合并所有接收到的数据,返回给调用方即可。
我的框架是,
建立socket句柄的数据映射,可以是list,map,随意,因为是多线程的,这点是必须的。
结构大致如下
myrevc_
{
申请新映射或者,如果有,就根据调用方提供的缓存大小依次返回数据,offset控制好即可,数据返回完毕就删除映射,。
调用原始recv,
判断网页类型,超文本协议,获取文件长度,编码类型等等。
这里不考虑大文件,所以循环调用原始recv,读取出所有数据,直到结束,然后合并,解码,dosameting。
返回调用方剩余的缓存区大小。
}
WSARecv大同小异,OVERLAPPED也不影响,
因为是很早以前的东西,不是用vc写的,所以源码就不贴出来了。
浙江启扬智能科技有限公司
2023-06-12 广告
2023-06-12 广告
在嵌入式开发中,建立交叉开发环境可以提高开发效率和代码质量。以下是建立交叉开发环境的一些原因:1. 硬件资源限制:嵌入式系统的硬件资源,如处理器主频、内存容量等,相对于PC机来说较为有限。利用PC机进行开发可以利用更快的硬件设备,提高开发效...
点击进入详情页
本回答由浙江启扬智能科技有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询