- 如果只是网页请求,相对来说简单一点,不需要考虑TCP还是UDP(http一定是TCP,https是SSL/TLS)。
- 其实你相当是要在iOS上做一个Proxy Server,但Proxy一般是有针对性的协议处理的,所以其实要分辨tcp和ud其实没有什么难度,因为每一种应用协议(http,smtp,ftp,sip,rtp,h323等等)对才使用的承载协议都有明确定义,例如http只是采用tcp的,不需要分析,而SIP是可以同时采用udp和tcp的,默认采用udp,协议的文档里有明确定义。就是说你很难做一个通用型的proxy自动去管理多种应用协议,一般都是针对性处理的,就是说例如在一个实现基础通讯的核心上通过不同的协议处理模块来实现对具体应用协议的处理。
从上面两点以及你的初步需求来看,你最好说明或者明确要针对哪种应用协议来进行代理,否则你要做的是就太复杂了。
假设只是针对http,你最好先找找有没有现成实现代理http的库,一个Back2Back Server:一端是客户端逻辑(像真正的服务器发出请求以及接受回复),一端是服务器逻辑(作为你的B设备的服务器,处理B的请求以及向B回复)。因为你这个应用不需要做任何数据处理(我假定),所以也就是一个restful服务器,仅仅做转发。
但这里有一个前提是,因为你的B是完全没有上网能力的设备(至少你没说明有),所以B不能直接通过设置网络代理的方式来通过A上网。如果你需要采用标准浏览器来访问,你必须修改B的网络核心层,估计这一步最难了,要改动到socket底层的实现,那么底层的部分我也没做过,估计你没有网络通讯开发经验更难。
我建议你最好采用自己修改过的浏览器,在浏览器核心中,把原来建立socket的逻辑全部修改为通过MFI(话说MFI是啥?)通讯。浏览器核心还是自己组装http请求和解释http回复。
因为是自己实现的通讯接口,所以协议可以自己定,大概把目标服务器IP/域名和端口,以及http请求数据一起传给A端;A端的APP处理这个自定义协议的数据,把http请求(根据需要做一定的数据修改,这里我不清楚会有什么需求)发到目标服务器;等待到回复后,除非你要做中间处理,否则基本上可以直接将http回复通过你的协议传回给B端。所以A上的APP其实不太需要对数据包进行处理(但这里只针对http来说,每种应用协议得单独分析)。
至于你问iOS如何解释网络数据包,这个问题还是得先清楚你问得是哪种协议,http的话iOS里面已经有封装,不需要你自己做,你只需要通过API来获取对应数据就可以了。如果是其他协议,例如smtp、sip之类的,得查查有没有系统支持(smtp应该有,sip不确定),没有就得找第三方库(自己实现协议栈其实很麻烦的,很少会这么干)。
上面回复的还是比较笼统,因为你的需求描述得相当不明确。