公司做了一个小型的wap浏览器的项目,其中涉及到用socket的实现http请求的方法,由于网上相关资料比较少,尤其是详细的资料比较少,所以走了不少弯路。在此仅从实现的角度说明MTK平台用Socket实现HTTP的方法,希望能给后来者一些微小的帮助。
一、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步,直接连接移动或联通的网关:10.0.0.172: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.1
Host: kong.net
User-Agent: SQH_D480B_01/LB19504/WAP2.0 Profile
Accept: application/vnd.wap.wmlc, ** //(想当长,省去后面部分)
Accept-Charset: utf-8, utf-16, iso-8859-1, iso-10646-ucs-2, GB2312, windows-1252, us-ascii
Accept-Language: zh-tw, zh-cn, en
Cookie: JSESSIONID=aAQP0FIXp3z7
Connection: Keep-Alive
“
POST方法
对一些需要向服务器传入参数的请求,按名称搜索等请求。还以空中网天气查询为例,之中的其他城市天气查询,输入其他城市名称或电话区号查询:
“POST /weather/search.jsp?setcity=1 HTTP/1.1
Host: kong.net
User-Agent: SQH_D480B_01/LB19504/WAP2.0 Profile
Accept: application/vnd.wap.wmlc, */* //(想当长,省去后面部分)
Accept-Charset: utf-8, utf-16, iso-8859-1, iso-10646-ucs-2, GB2312, windows-1252, us-ascii
Accept-Language: zh-tw, zh-cn, en
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Cookie: KONG_ACCESS=AWYZhg==; JSESSIONID=a91MDc6qoMYf
Connection: Keep-Alive
Content-Length: 46//get方法没有这一项
××××××//传给服务器46字节长的数据(参数)
“
当然如果是CMWAP联网方式也要和上述的GET方法一样设置Host和X-Online-Host项,Host:10.0.0.172
X-Online-Host: kong.net
以上的内容,可以在调试状态下运行模拟器的wap浏览器,在soc_send方法处插入断点观察。
HTTP的其他方法,由于在应用中没有用到,在这里不做介绍。
(秩名) |