学者之家电子论坛--打造电子工程师共同致富的平台's Archiver

chenhe 发表于 2009-12-19 13:02

MTK平台下使用socket实现http通讯

1.移动代理服务器


IP:10.0.0.172 port:80



2.MTK socket接口


1)soc_create创建socket接口
2)soc_setsockopt设置socket option
3)soc_connect建立连接,在这里连接的对像是代理服务器10.0.0.172
4)soc_send发送信息
5)soc_recv接收信息
6)非阻塞模式,手机平台通讯都是非阻塞模式,因此soc_connect和soc_recv一般不会马上返回成功,而是返回SOC_WOULDBLOCK.意思是要等待一会儿,.所以我们要调用SetProtocolEventHandler来设置回调函数.



3.http格式


一个的HTTP请求格式如下:
GET [url]http://www.google.cn[/url] HTTP/1.1\r\n
Host: [url]www.google.cn[/url]\r\n
Proxy-Connection: Keep-Alive\r\n
\r\n

GET后面是请求的文件,Host后面是请求的域名.每行都以\r\n结束.最后还必须有一个空行.一般情况下请求包只有包头,没有包体.

一个的HTTP响应消息格式如下:
HTTP/1.1 200 OK [ZTEOSE]\r\n
Server: ZTEOSE\r\n
Date: Tue, 15 Jul 2008 04:50:08 GMT\r\n
Server: WebLogic Server 8.1 SP3 Tue Jun 29 23:11:19 PDT 2004 404973 with CRs:\r\n
Set-Cookie: jid=L8sQcQ71W0!225012077; path=/\r\n
Content-Length: 494\r\n
Content-Type: text/vnd.wap.wml;charset=UTF-8\r\n
\r\n
(数据....)

通常,移动响应的第一个包是重定向,如下所示:
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head>
<meta http-equiv="Cache-Control" content="max-age=0" forua="true"/>
<meta http-equiv="Cache-Control" content="no-cache" forua="true"/>
<meta http-equiv="Cache-Control" content="must-revalidate" forua="true"/>
</head>
<card id="card" title="" >
<onevent type="onenterforward">
<go href="http://www.google.cn:80/?t=08458"></go></onevent>
</card>
</wml>

其中[url]http://www.google.cn:80/?t=08458[/url]就是要重定向的URL,客户端接到这个包之后要重新发一个请求包,而且把
GET [url]http://www.google.cn[/url] HTTP/1.1\r\n
改成:
GET [url]http://www.google.cn:80/?t=08458[/url] HTTP/1.1\r\n
之后就能得到想要的数据了.

页: [1]

Powered by Discuz! Archiver 7.1  © 2001-2009 Comsenz Inc.

302 Found

302 Found


nginx/1.8.0