惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

大猫的无限游戏
大猫的无限游戏
云风的 BLOG
云风的 BLOG
小众软件
小众软件
V
V2EX
博客园 - Franky
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
量子位
博客园 - 【当耐特】
雷峰网
雷峰网
WordPress大学
WordPress大学
Jina AI
Jina AI
Google DeepMind News
Google DeepMind News
N
Netflix TechBlog - Medium
爱范儿
爱范儿
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
阮一峰的网络日志
阮一峰的网络日志
IT之家
IT之家
Blog — PlanetScale
Blog — PlanetScale
Hugging Face - Blog
Hugging Face - Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
V
Visual Studio Blog
Microsoft Security Blog
Microsoft Security Blog

博客园 - yoyolion

设置vs2005输出目录,提高PDA模拟器程序调试速度 svn1.5.0.13366可用下载地址 svn权限文件的注意事项 只允许修改自己的svn日志的钩子脚本 MySQL导出和导入SQL脚本 becky邮件客户端163邮箱设置 在Total command中显示Tortoise svn叠置图标的方法 头文件被修改导致一个难以理解、难以调试的错误 使用vs2005创建智能设备的C#和C++混合项目 .NET Compact Framework使用P/Invoke服务 vs2005的可再分发组件的路径 使用Lutz Roeder’s .NET Reflector反编译.NET Compact Framework程序集 NoteExpress PubMed 导入过滤器修正 关于系统U盘和未来5-10年电脑硬件发展的一点想法 GPRS上网打开普通页面的流量 MapInfo2007年用户大会参会记录 关于GPRS(cmnet、cmwap)和CDMA 1X的比较及最优方案 判断目录是否存在 解决UNICODE字符集下CStuioFile无法写入中文
使用GPRS的cmwap接入点实现网络通讯1-----建立连接
yoyolion · 2007-05-26 · via 博客园 - yoyolion

使用GPRS的cmwap接入点实现网络通讯1-----建立连接
关于无线接入方式的比较请见http://www.cnblogs.com/yoyolion/archive/2007/05/26/760807.html
 
cmwap作为费用低廉的无线上网方式,具有很大的应用价值。本文讨论了使用GPRS的cmwap接入点实现网络通讯,完成自定义数据的收发。
 
环境与平台:
服务器拥有一个公网ip,设为100.200.300.400 ,端口1000(为尽量简化,不使用域名,应该没有区别)
测试平台:服务器windows 2000 server,客户端pocket pc 2003 sencond edition(windows ce.net 4.2),软件以vc++2005开发(mfc8.0)
 
使用Pocket IE请求访问http:// 100.200.300.400:1000时,服务器端收到的数据如下


GET / HTTP/1.1
Host: 100.200.300.400: 1000
Accept: */*, text/x-vcard, text/x-vcalendar, image/gif, image/vnd.wap.wbmp
Accept-Language: zh-cn
UA-OS: Windows CE (Pocket PC) - Version 4.21
UA-color: color16
UA-pixels: 240x320
UA-CPU: Intel(R) PXA272
UA-Voice: TRUE
UA-Language: JavaScript
Accept-Encoding: gzip, deflate
Content-length: 0
Via: WTP/1.1 BJBJ-P-GW06-WAP.bj.monternet.com (Nokia WAP Gateway 4.0/CD3/4.1.79)
X-Forwarded-For: 10.12.239.87
X-Source-ID: GGSN
X-Nokia-CONNECTION_MODE: TCP
X-Up-Bearer-Type: GPRS
X-Nokia-gateway-id: NWG/4.1/Build04
Connection: close

 
可以看到它是普通的HTTP协议请求Request。
 
以下是客户端向100.200.300.400:1000发送一个请求的代码(为求清晰,省略了错误处理)


SOCKET m_socket;
socket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);//TCP套接字

struct sockaddr_in m_SeverAddr;//服务器地址
m_SeverAddr.sin_family = AF_INET;
m_SeverAddr.sin_addr.s_addr=inet_addr(“10.0.0.172”);//cmwap代理服务器ip
m_SeverAddr.sin_port = htons(80);//端口
 
connect(m_socket, (sockaddr *)&m_SeverAddr, sizeof(m_SeverAddr));
 
char request[100];
//下面是HTTP请求,注意一定是以空行结束(\r\n\r\n),具体参考HTTP协议
sprintf(request, "%s", "GET http://100.200.300.400:1000 HTTP/1.1\r\n\r\n");
 
send(m_socket, request, len, 0);//发送请求


connect是和cmwap代理服务器建立连接,再通过代理服务器完成与服务器的通信,成功执行send后(GET http://100.200.300.400:1000 HTTP/1.1),服务器很快就收到了请求包,如下:


GET / HTTP/1.1
Host: 100.200.300.400:1000
Content-length: 0
Via: WTP/1.1 BJBJ-P-GW13-WAP.bj.monternet.com (Nokia WAP Gateway 4.0/CD3/4.1.79)
X-Forwarded-For: 10.12.104.128
X-Source-ID: GGSN
X-Nokia-CONNECTION_MODE: TCP
X-Up-Bearer-Type: GPRS
X-Nokia-gateway-id: NWG/4.1/Build04
accept: */*
Connection: close
 

可以看到cmwap代理服务器为请求GET http://100.200.300.400:1000 HTTP/1.1加上了一些头信息,主要是网关地址BJBJ-P-GW13-WAP.bj.monternet.com,这个应该是称动服务器的URL。
 
如果是在重置或切换网络后第一次使用GPRS,可能会收到cmwap代理服务器发出的提示:


HTTP/1.1 200 OK, Success
Content-length: 725
Content-Type: text/vnd.wap.wml;charset=UTF-8
Date: Sat, 26 May 2007 02:40:06 GMT
Pragma: no-cache
Server: WebLogic Server 8.1 SP3 Tue Jun 29 23:11:19 PDT 2004 404973 with CRs:
Cache-Control: no-store, no-cache, must-revalidate, max-age=0
 
<?xml version="1.0" encoding="UTF-8"?><!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 title=""><p>中国移动通信提醒您:<br/>您正在使用手机上网业务,若继续浏览网页,会产生GPRS通信费,具体资费标准请垂询10086热线或访问www.sh.chinamobile.com。对包月客户仍按套餐资费标准收费。<br/>=继续访问请点击=<br/><a href='100.200.300.400:1000/?t=06158'>100.200.300.400:1000</a></p></card></wml>


我使用的是上海移动的神州行cmwap包月卡,这个提示信息是上海移动提醒客户端确认是否要进行internet访问的,可能是为了避免客户无意中使用GPRS而导致产生流量费用。该提示仅在重置或切换网络后第一次使用GPRS出现,后面再连接等不会出现。这个提示应该是和具体的网络提供商有关,使用其它省的包月卡可能没有这个提示。

具体处理时可以先判断一下是否有该提示,如果有,再次调用send(m_socket, request, len, 0)发送请求即可。

这样,通过connet到cmwap代理服务器,再发出一条Request,就实现了建立与目标服务器100.200.300.400:1000的连接,当然这种连接是间接的。