




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
下边用的是socket方式实现网络通信,如果要实现http通信,需要在第五步的时候,先发送http的一些头文件。说明此次通信是http,然后再发送具体的数据就行啦。mtk平台手机基于gprs连接pc的实现方式(tcp通讯方式)1.建立data account(上网帐号) MMI层发送PRT_MMI_PS_SET_GPRS_DATA_ACCOUNT_REQ消息到L4C层, 在消息中设定data account 的id(1-10),自定义名称,APN(cmnet, cmwap),用户名,密码,DNS等消息。 /* DTCNTGPRSSetAccountReq() ?*/2.创建socket手机上用socket建立连接和PC用socket建立连接的原理是一样的,只是API函数不一样。 kal_int8 soc_create(kal_uint8 domain, socket_type_enum type, kal_uint8 protocol, module_type mod_id, kal_uint32 nwk_account_id);3.设置socket的异步非阻塞模式 kal_int8 soc_setsockopt(kal_int8 s, kal_uint16 option,kal_uint8 *val, kal_uint8 val_size); 这里的第二个参数option设置为SOC_NBIO(socket非阻塞模式) kal_int8 soc_setsockopt(kal_int8 s, kal_uint16 option,kal_uint8 *val, kal_uint8 val_size); 这里的第二个参数option设置为SOC_ASYNC(异步I/O)4.建立连接 kal_int8 soc_connect(kal_int8 s, sockaddr_struct *addr);5.发送数据 标记,发送头文件 kal_int32 soc_send(kal_int8 s,kal_uint8 *buf, kal_int32 len, kal_uint8 flags);6.读取数据 kal_int32 soc_recv(kal_int8 s,kal_uint8 *buf, kal_int32 len, kal_uint8 flags);7.关闭连接 kal_int8 soc_close(kal_int8 s);一、MTK平台Socket联网过程熟悉PC机编程的人都知道,Socket编程接口分两套:TCP和UDP;TCP和UDP中又有服务器端和客户端的概念,这里讲的是TCP的客户端编程接口。MTK平台中Socket创建步骤: 1、soc_create() 创建Socket; 2、soc_setsockopt 设置Socket为非阻塞模式; 3、soc_setsockopt 设置Socket选项为连接,读,写,关闭;不清楚为什么要连续设置两次,如有高人路过,请指点; 4、如果是CMNET联网并且请求中用到了英文域名还需要解析域名soc_gethostbyname,除非使用ip作为域名,解析出来的IP作为我们建立连接的目标IP;如果是CMWAP联网,直接跳到第5步,直接连接移动或联通的网关:72:80; 5、soc_connect与服务器建立连接; 6、soc_send 发送请求; 7、soc_recv 接收服务器返回的数据; 8、soc_close 关闭Socket; 9、如果需要关闭数据账户soc_close_nwk_account二、CMNET,CMWAP方式下的HTTP请求内容格式HTTP请求格式:GET方法MTK模拟器中wap浏览器发送的请求内容“GET /go_13596557 HTTP/1.1Host: User-Agent: SQH_D480B_01/LB19504/WAP2.0 ProfileAccept: application/vnd.wap.wmlc, * /(想当长,省去后面部分)Accept-Charset: utf-8, utf-16, iso-8859-1, iso-10646-ucs-2, GB2312, windows-1252, us-asciiAccept-Language: zh-tw, zh-cn, enCookie: JSESSIONID=aAQP0FIXp3z7Connection: Keep-Alive“POST方法对一些需要向服务器传入参数的请求,按名称搜索等请求。还以空中网天气查询为例,之中的其他城市天气查询,输入其他城市名称或电话区号查询:“POST /weather/search.jsp?setcity=1 HTTP/1.1Host: User-Agent: SQH_D480B_01/LB19504/WAP2.0 ProfileAccept: application/vnd.wap.wmlc, */* /(想当长,省去后面部分)Accept-Charset: utf-8, utf-16, iso-8859-1, iso-10646-ucs-2, GB2312, windows-1252, us-asciiAccept-Language: zh-tw, zh-cn, enContent-Type: application/x-www-form-urlencoded; charset=utf-8Cookie: KONG_ACCESS=AWYZhg=; JSESSIONID=a91MDc6qoMYfConnection: Keep-AliveContent-Length: 46/get方法没有这一项/传给服务器46字节长的数据(参数)“当然如果是CMWAP联网方式也要和上述的GET方法一样设置Host和X-Online-Host项,Host:72X-Online-Host: 以上的内容,可以在调试状态下运行模拟器的wap浏览器,在soc_send方法处插入断点观察。HTTP的其他方法,由于在应用中没有用到,在这里不做介绍。三、CMNET,CMWAP连接差别1、GPRS账户:与pc机上的socket客户端接口不同,手机客户端在soc_create,soc_gethostbyname接口中都多了参数 nwt_acount_id,只的是一般在“网络服务”-“数据账户”-“GPRS”下的GPRS数据账户id,一般起始的一个账户id 是10,往下递增1,在建立连接过程中,如果是CMWAP方式联网,soc_create,soc_gethostbyname接口就要设置接入点为 CMWAP的账户id,CMNET就要设置接入点为CMNET的账户。2、目标服务器:还以空中网的天气服务为例,CMNET情况下,soc_connect需要连接””这个ip,如果请求的url为”/weather/home.jsp” ,还需要调用soc_gethostbyname接口去解析域名;如果是CMWAP方式联网,soc_connect只需要连接移动或联动的网关”72:80”。3、HTTP请求内容格式(或称报文):如第二节所述。四、SIM1还是SIM2联网 SIM1还是SIM2联网,MTK平台是通过创建socket时传入的nwt_acount_id区分的,如果是SIM1上网,账号就是指的是一般在“网络服务”-“数据账户”-“GPRS”下的对应的GPRS数据账户id;如果是SIM2,通过在四字节的账户id其他字节设置掩码来区分。设置接口比如07B平台的always_ask_encode_data_account_id,6235_08A的cbm_encode_data_account_id接口。不同平台可能略有差别。五、联通卡还是移动卡?参考其他Socket联网代码中有的以接入点是否为”uniwap”来判断是不是联通的代理上网,但是通过实验,即使在联通卡时连接移动的”cmwap” 账户,也是可以正常联网的。不知道设计“GPRS数据账户”的最初意图是什么?通过apn来区分同一内部ip地址网关不同的公网ip吗?如有高人路过,请指点;六、HTTP1.1与Transfer-Encoding 为chunked的编码方式 发送一个请求后,如果服务器返回的消息头内容包括“Transfer-Encoding: chunked”那么他的传输编码为“chunked”类型。这种传输类型的数据体内容格式是这样:16进制数字字符串 1到4个字节 lenrnlen 长的数据体rn16进制数字字符串 1到4个字节 lenrnlen 长的数据体rn16进制数字字符串 1到4个字节 len = 0rnrn其中,长度len是16进制的数字,表示本段数据体的长度(字节数),回车换行后,就是这一段数据真实内容,这就是一段数据体的格式,一段接一段;直到数据体长度为0的数据段出现,紧接着两个回车换行,标识本次请求的数据均已接收完毕。不过socket可以根据soc_recv返回值等于0来判断接收数据结束。如果收到的是这个编码类型的内容,需要对接收到的数据进行处理。七、MTK平台的S8类型的误导 MTK平台定义的两个数据类型U8和S8,一看名称我们可能会以为是unsigned char和signed char,但事实并非如此,typedef char S8;typedef unsigned char U8; MTK平台的char默认也是unsigned char类型的,soc_gethostbyname返回值类型是kal_int8(typedef signed char kal_int8;),如果S8或平台的char类型是有符号的字符型,那么,kal_int8和S8应该是等价的,但用S8类型变量作为 soc_gethostbyname的返回值时,经常返回254导致域名不会被正常解析,其实应该返回SOC_WOULDBLOCK(-2),应该是阻塞码,将soc_gethostbyname返回值类型改为kal_int8后,就能正常处理域名解析了。这证明平台的S8类型及char类型默认是无符号的。八、不理解的链接错误? 在添加连接超时功能时用到了gui_start_timer和gui_cancel_timer时,没有加入#include gui.h时,出现以下链接错误:Error: L6286E: Value(0x818153e) out of range(-0x400000 - 0x3fffff) for relocation #13 (wrt symbol gui_cancel_timer) in Socket.obj(i. SocDinit)加上#include gui.h时,就没有这个问题,如果程序找不到这个符号,应该是个编译错误,在此为什么是个链接错误。MTK使用Socket来实现HTTP的请求。 MTK平台中Socket创建步骤: 1、soc_create() 创建Socket,成功后将返回一个socket_id供下面的函数使用,成功运行在手机上的效果是打开黄色边框的GPRS图标,对应手机nwk_account_id的值有10和14,分别代表网络接入点CMWAP和CMNET。 2、soc_setsockopt 设置Socket为非阻塞模式/异步模式; 3、连接准备 如果是CMNET联网并且请求中用到了英文域名,还需要调用soc_gethostbyname函数解析域名,解析出来的IP作为我们建立连接的目标IP。 如果是CMWAP联网,直接跳到下一步,直接连接移动网关.172:80即可。 4、连接 soc_connect与服务器建立
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 染发考试题及答案
- 古汉考试题及答案
- 护理核心制度及安全试题与答案
- 护理人员岗位职责试题(含答案)
- 中西医结合外科学(广州中医药大学)知到智慧树答案
- 黑龙江高级机修木工理论模拟试题(附答案)
- 2025二手设备买卖协议书附二手设备残值回收条款
- 2025地产劳务合作劳务派遣服务合同
- 2025出租屋承包合同协议书-旅游度假区出租屋经营合同
- 盾构噪音控制方法-洞察及研究
- 人教PEP版(2024)新四年级上册 教材解读
- 纪念中国人民抗日战争暨世界反法西斯战争胜利80周年
- 2025四川省高级人民法院招聘聘用制审判辅助人员30人考试备考题库及答案解析
- 加气块砌筑知识培训课件
- 智慧养老服务与管理课件
- 2025年湖南安全技术职业学院招聘考试笔试试题(含答案)
- 配电带电作业工考试试卷与答案
- 2025年河南省机关事业单位工勤技能岗位等级考试(兽医防治员·高级技师/一级)(综合评审技能)历年参考题库含答案详解(5卷)
- 2025年职业技能鉴定考试(地勘钻探工)历年参考题库含答案详解(5套)
- 医院感控知识培训
- 2025年治安管理处罚法知识竞赛试卷及答案
评论
0/150
提交评论