根治某“毒瘤”-手机GPRS下网有关问题

根治某“毒瘤”--手机GPRS上网问题
之前老是碰到手机不能上网(APN已经设置),今天调试之前写的程序,发现还是不能上网,google了一下,终于发现了问题。

首先来看问题:
引用

在DownloadProvider  中有如下代码

 
HttpClient client = new DefaultHttpClient();
   HttpGet request = new HttpGet("xxx.xxx.xxx");
   request.setHeader("User-Agent", "some user agent");
   HttpResponse response = client.execute(request);

这段代码在WIFI和模拟器上下载东西没有问题,但是通过GPRS下载,response = client.execute(request); 这句代码报出“java.net.UnknownHostException: Host is unresolved:” 请问哪位大哥有建议。


再来读一段历史:

引用
朋友在对CMWAP和CMNET的区别还是不甚了解,导致了很多朋友在毫无知觉的情况下被扣了一大笔流量费,可真是心疼啊!对于一些新软件,也经常有人会问“CMWAP可以用吗?”,那么我们今天就来谈谈CMWAP和CMNET的主要区别与适用范围。

所谓cmwap和cmnet,这只是2G时代的一个特殊现象,也只是独具中国特色的一个现象。正如中移动人为将品牌划分为全球通、神州行和动感地带,只是为了区别而区别而已。葛优满大街的追着向人诉说:神州行,我看行。我看也行。品牌本无所谓,但当连小小的QQ都开始讲究“尊贵的钻石身份”的时候,那还有什么好说的?让无聊的我们就来无聊地研究研究这无聊的区别吧:

一、为什么会有两个接入点?

在国际上,通常只有一种GPRS接入方式,为什么在中国会有CMWAP和CMNET两兄弟呢?(彩信之所以单独配置接入点是因为彩信服务需要连接专用的服务器,在这里不作探讨。)

其实,CMWAP和CMNET只是中国移动人为划分的两个GPRS接入方式。前者是为手机WAP上网而设立的,后者则主要是为PC、笔记本电脑、PDA等利用GPRS上网服务。它们在实现方式上并没有任何差别,但因为定位不同,所以和CMNET相比,CMWAP便有了部分限制,资费上也存在差别。

cmwap从出发点上专为访问wap网站设计,当然你也可以访问www网站,可以登录QQ软件,但前提都是,你只能用http代理协议(80和8080端口)和wap网关协议(9201端口)。想用pop3收个Email?那基本是白想。所以,除非程序提供了使用http端口接入的方法,否则一般是上不了的。这也正是文章Google发布手机端Gmail软件的留言中,有那么多网友反映无法使用的原因,他们用移动梦网(cmwap)接入的,而Gmail软件并非用这个端口来连接服务器,所以无法使用。

cmnet无任何限制。它和我们用电脑正常接入互联网完全一样。

(1)wap接入点cmwap和cmnet有什么不同?

1、连网方式不同就是说通过cmwap的方式访问,需要走移动的网关通过http协议去连接,这样的后果就是速度会变慢,信很多朋友都用过代理服务器吧,就是那个感觉,但用手机的浏览器访问wap网站或使用网络功能,不会感觉到接入点的速度差别.因为手机本身处理速度有限制。而通过cmnet来连接的,就是直接连接到internet上的服务器,速度会比cmwap的快一些。如果用手机做猫,连接电脑上网时才会体现出来。cmwap速度会很慢,而有很多限制,甚至有的地区根本无法用cmwap连接电脑,cmnet是移动专门的提供无线网络服务的接入点,速度基本和电话拨号上网相当。CMNET和CMWAP是中国移动GPRS网络的两个不同APN(AccessPointName接入点名称)。CMNET提供了NAT服务,使用该服务的手机可直接访问internet。CMWAP只提供了WAP代理和HTTP代理,手机上网能访问的范围有限,接入时只能访问GPRS网络内的IP(10,*,*,*)。因此CMWAP主要用于手机WAP上网,CMNET则是用于PC,笔记本电脑,PDA等设备实现GPRS上网。两者手机上网的方式没有差别,如此划分是中国移动对手机上网服务对象的定位不同,所以他们的应用范围和资费标准不同。如果使用cmwap接入点的话,通过gprs连接后你所得到的一个IP地址是形如10.x.x.x,这个地址是一个A类地址。也就是俗称的内网地址。这个地址的访问收到很多限制。一般就是本子网内部。对于中国移动来说收到的限制就是只能访问中国移动wap网络。如果你使用cmnet接入点的话你得到的是一个形如202.xxx.x.x或者61.x.x.x之类的地址。这是一个c类地址。它可以*的访问整个互联网上的任何网站。也就是说它和你的电脑上网的能力是一样的。正是这个区别造成了两者在资费上的差别。因为cmwap所需要的都是移动网络内部的流量。成本可以忽略不计算,而cmnet则需要中国移动为此而支付网间结算费用。所以要转嫁到你头上。但事实上这个费用远远低于你为此而付出的费用。所以移动才被列入暴利行业……扯远了。既然大家明白了区别也就自然明白了两个接入点所能提供的应用区别了。所以用cmwap只能访问服务器位于wap网内的网站或者使用提供服务的站位于wap网内的软件。例如掌迅通,10game之类。如果你用了cmnet。那么任何服务,网络,软件,都可以*使用了。但是有人要说,我用cmwap挂代理也可以访问任何网站,这是什么原因呢?原因在于中国移动的彩信留下的一个大后门。其实这个不能称之为后门。因为它基本是一个公开的通道了。也就是10.0.0.172:80,这个地址移动自己称之为彩信网关,于这个网关承担了全网的彩信以及这么多的代理用。所以速度并不快,但也足以使用。可是移动也并不甘心被大家当代理用来连接电脑上网。因此也做了一定的*.但是*的技术并不高明。只是针对ie/maxthon等pc上的浏览器的标识符做了屏蔽。因为浏览器在访问站的时候会发出带有浏览器标识的数据包。移动可以通过这个来识别用户是用什么浏览器上网,进而做出*或者允许通过的决定。其目的就是只允许手机的浏览器通过这个网关。因为手机上的浏览器和pc上的是完全不一样的。所以绕过这个屏蔽的方法也很简单。就是修改一下注册表,让pc上的浏览器标识变化一下就解决了。同理一些手机上的浏览器也有一些补丁让原本被屏蔽的浏览器标识变成允许通过的浏览器标识。但是这个10.0.0.172的网关只支持80端口的应用,因此用cmwap直接实现http的代理是可行的。要实现其他业务如mail,udp等都无法做到。而cmnet就不受此限制。因为cmnet的c类地址端口是全开的。这时一些件企业就应运而生了。他们开发出一些软件。然后利用自己的服务器,替用户做http2sock的代理。当然这些是嵌在软件内部.用户是看不到的。用户所要做的就是开通gprs,然后用cmwap。安装这种软件就可以通过软件来进行IM,邮件,游戏等只有cmnet才可以享受的服务了。但是这种软件也有自己的局限性,只能针对他们所能提供的服务,而且有密码和关键信息泄漏之虞,因为用户需要把自己的账户信息完全通过软件服务器中转。因此如果你所需要的服务恰好有软件可以提供。那么你就可以轻松的享受低价cmwap包月带来的快乐了。如果没有这种软件,很不幸,那你就忍受cmnet的高价勒索吧。

2、资费不同各地cmwap一般10-20元包月,而cmnet一般是100-200元包月。如果仅仅是在手机上使用网络服务的话,选择cmwap包月无疑是最实惠的。

二、什么是WAP?WAP只是一种GPRS应用模式,它与GRPS的接入方式是无关的。WAP应用采用的实现方式是“终端+WAP网关+WAP服务器”的模式,不同于一般Internet的“终端+服务器”的工作模式。主要的目的是通过WAP网关完成WAP-WEB的协议转换以达到节省网络流量和兼容现有WEB应用的目的。WAP网关从技术的角度讲,只是一个提供代理服务的主机,它不一定由网络运营商提供。但据我所知,中国移动GPRS网络目前只有唯一的一个WAP网关:10.0.0.172

<over>


好吧,你终于明白了你不能”轻易“上网是因为某些官僚机构的历史问题导致。

下面是解决办法:

String testUrl = "http://www.ifanr.com/feed";
URL url = new URL(testUrl);
String tmpUrl = "http://10.0.0.172" + url.getPath();
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(tmpUrl);
request.setHeader("X-Online-Host", url.getHost());
request.setHeader("User-Agent", "some user agent");


Done. 世界终于太平了。。