CMNET、CMWAP都是手机上网使用的接入点的名称。
联通等运营商也有类似区别的服务。
这里以移动的CMNET和CMWAP为例,他们的区别是:
通过CMNET可以获得完全的Internet访问权,可以访问pop和imap等众多互联网服务;
通过CMWAP只能访问网页,无法访问pop和imap等众多互联网服务。
CMWAP和CMNET费用和设置:
CMWAP和CMNET是移动的两种接入点,分别包含在各种套餐中,CMWAP是比较便宜的,
CMNET较贵,但是因为是标准的互联网协议,他的特点是快。
所以在手机设置中要看好自己这种的接入点是什么,
如果你仅仅包了cmwap但是使用了cmnet,会产生额外并且巨大的费用。
(1) 为什么会有两个接入点?
在国际上,通常只有一种GPRS接入方式,为什么在中国会有CMWAP和CMNET两兄弟呢?(彩信之所以单独配置接入点是因为彩信服务需要连接专用的服务器,在这里不作探讨。)
其实,CMWAP 和 CMNET 只是中国移动人为划分的两个GPRS接入方式。前者是为手机WAP上网而设立的,后者则主要是为PC、笔记本电脑、PDA等利用GPRS上网服务。它们在实现方式上并没有任何差别,但因为定位不同,所以和CMNET相比,CMWAP便有了部分限制,资费上也存在差别。
(2) 什么是WAP?
WAP只是一种GPRS应用模式,它与GRPS的接入方式是无关的。WAP应用采用的实现方式是“终端+WAP网关+WAP服务器”的模式,不同于一般Internet的“终端+服务器”的工作模式。主要的目的是通过WAP网关完成WAP-WEB的协议转换以达到节省网络流量和兼容现有WEB应用的目的。
WAP网关从技术的角度讲,只是一个提供代理服务的主机,它不一定由网络运营商提供。但据我所知,中国移动GPRS网络目前只有唯一的一个WAP网关:10.0.0.172,有中国移动提供,用于WAP浏览(HTTP)服务。有一点需要注意,WAP网关和一般意义上的局域网网关是有差别的,标准的WAP网关仅仅实现了HTTP代理的功能,并未完成路由、NAT等局域网网关的功能。这就决定了它在应用上所受到的限制。
(3) 中国移动对CMWAP的限制
为了从应用中区别两者的定位,中国移动对CMWAP作了一定的限制,主要表现在CMWAP接入时只能访问GPRS网络内的IP(10.*.*.*),而无法通过路由访问Internet。(少数地区的移动网络可能不存在这一限制。)我们用CMWAP浏览Internet上的网页就是通过WAP网关协议或它提供的HTTP代理服务实现的。
说到这里,就让我自然而然的联想到公司的网络,相信不少工作的朋友都有类似的体会。公司的网络在网关上不提供路由和NAT,仅仅提供一个可以访问外网的HTTP代理。这样,我们就无法直接使用QQ、MSN等非HTTP协议的应用软件了(好在它们还提供的有HTTP代理的连接方式)。CMWAP也正是如此。
(4) 适用范围
适用范围才是大家最关心的问题。CMNET拥有完全的Internet访问权,这里就不多说了,主要让我们来看看CMWAP。因为有了上面提到的限制,CMWAP的适用范围就要看WAP网关所提供的支持了。目前,中国移动的WAP网关对外只提供HTTP代理协议(80和8080端口)和WAP网关协议(9201端口)。
因此,只有满足以下两个条件的应用才能在中国移动的CMWAP接入方式下正常工作:
1. 应用程序的网络请求基于HTTP协议。
2. 应用程序支持HTTP代理协议或WAP网关协议。
如何辨别一个应用程序的网络请求是否基于HTTP协议?
这个问题还真不好回答,要完全做到这一点需要通过拦截应用程序的通信数据包进行分析。这里提供几个简单的方法给广大菜鸟朋友:从表现上看,如果它的网络请求是网址(URL)的形式,那么通常是基于HTTP协议的,如Web浏览器;如果它连接的服务器端口是80,那么它可能是基于HTTP协议的。如果确实无法准确判断,那么请直接看下一个条件。(满足第二个条件的应用一定是基于HTTP协议的)
如何区别一个应用程序支持HTTP代理协议还是WAP网关协议呢?
首先看它的设置中有没有代理服务器的选项(通常在S60上未特别说明的代理都是特指HTTP代理),如果有则表示它支持HTTP代理协议。如果没有,则需要按照以下步骤测试:
在GPRS接入点设置的高级设置里去掉代理服务器的设置项:Server Address 和 Server Port,如果应用程序可以正常工作,那么它是基于WAP网关协议,如Java程序、S60内置的浏览器。如果在此状态下不能正常工作,而恢复GPRS接入点高级设置中的代理服务器设置后能够正常工作,则应用程序支持HTTP代理协议(代理设置从系统中读取)。如果仍不能正常工作,那么这个应用程序一般来说是不支持 HTTP代理协议或WAP网关协议的。
继续解答:
有煤油问,wap可不可以看在线视频,回答可以,只要你有20无限wap包月你下载uc7。1在下个ucM8专用播放器就可以看在线视频了。流畅度一般但是比诺基亚要好的多。很方便。
[html] view plaincopy
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.URL;
/**
* 下载器
*/
public class DownloadUtil {
private static final String TAG = "Downloader";
/**
* @return InputStream 下载
*/
public static HttpURLConnection download(String url) {
HttpURLConnection conn = null;
try {
String proxyHost = android.net.Proxy.getDefaultHost();
if (proxyHost != null) {//如果是wap方式,要加网关
java.net.Proxy p = new java.net.Proxy(java.net.Proxy.Type.HTTP, new InetSocketAddress(
android.net.Proxy.getDefaultHost(), android.net.Proxy.getDefaultPort()));
conn = (HttpURLConnection) new URL(url).openConnection(p);
} else {
conn = (HttpURLConnection) new URL(url).openConnection();
}
// conn.setReadTimeout(5000);
conn.setConnectTimeout(10000);
conn.setRequestMethod("GET");
conn.setRequestProperty(
"Accept",
"image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*");
conn.setRequestProperty("Accept-Language", "zh-CN");
conn.setRequestProperty("Referer", url);
conn.setRequestProperty("Charset", "UTF-8");
conn.setRequestProperty(
"User-Agent",
"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.connect();
if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
return conn;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
我们最开始的实现方式就使用HttpUrlConnection,但是因为这个无法在wap网络下登陆,最后没办法,切换成HttpClient,并且加了代理就可以了。刚刚发现上面的代码,就是对HttpUrlConnection加了代理,上次就是没看到这份代码,要不也不用改动那么大了。
无论是移动、联通还是电信,都至少提供了两种类型的的APN:WAP方式和NET方式。其中NET方式跟WIFI方式一样,无需任何设置,可自由访问所有类型网站,而WAP方式,需要手机先设置代理服务器和端口号等信息,并且只能访问HTTP协议类型的网站。
1) 移动的WAP名称是CMWAP,NET名称是CMNET;
2) 联通的WAP名称是UNIWAP,NET名称是UNINET;联通3G的WAP名称是3GWAP,NET名称是3GNET;
3) 电信的WAP名称是CTWAP,NET名称是CTNET;
其中,移动和联通的WAP代理服务器都是10.0.0.172,端口号是80;而电信的WAP代理服务器是10.0.0.200,端口号是80。
Android系统中,对于APN网络的API是隐藏的,因此获取手机的APN设置,需要通过ContentProvider来进行数据库查询,查询的URI地址是:
取得全部的APN列表:content://telephony/carriers;
取得当前设置的APN:content://telephony/carriers/preferapn;
取得current=1的APN:content://telephony/carriers/current;
CMNET和CMWAP
分类: Android2011-02-25 13:59 405人阅读 评论(0) 收藏 举报
wapinternet中国移动网络手机access
CMNET 和CMWAP是中国移动GPRS网络的两个不同APN(Access Point Name接入点名称)。CMNET提供了NAT服务,使用该服务的手机可以直接访问internet。CMWAP只提供了WAP代理和HTTP代理,手机上网能访问的范围有限,接入时只能访问GPRS网络内的IP(10,*,*,*)。因此CMWAP主要用于手机WAP上网,CMNET则是用于PC,笔记本电脑,PDA等设备实现GPRS上网。两者手机上网的方式没有差别,如此划分是中国移动对手机上网服务对象的定位不同,所以他们的应用范围和资费标准不同。
A:CMWAP只开放80,8080,9201端口,适合http,wap访问 (10.0.0.172起初是做为CSD方式的无线接入的网关,那时使用的是9201端口,运行的是WAP(Wireless Access Protocal)一种专门的无线终端访问数据网络的羞议。它的作用其实更多的是作为Mobile Network和Internet之间的网关,将无线终端的WAP address请求递交给DNS解析,然后重定向至WAP站点。
进入GPRS时代后10.0.0.172开始作为proxy使用开放了80端口,仍然承载WAP并开始提供更多的服务,例如:MMS和HTTP。手机这时其实更象是局域网中使用proxy的Internet address上网的设备)
CMNET适合象socket等非http请求访问.
B: CMNET可以把他想象成PC上的直接连接INTERNET。如果用CMNET接入点,可以直接上INTERNET
CMWAP就相当于PC上的局域网。中国电信只针对CMWAP开放2个端口,就是80和9201,如果CMWAP接入,要连接INTERNET,需要才用HTTP代理协议.
C:费用比较
CMWAP所需要的都是移动网络内部的流量,成本可以忽略不计算.
CMNET则需要中国移动为此而支付网间结算费用
D: 访问内容
用CMWAP只能访问服务器位于wap网内的网站或者使用提供服务的网站位于wap网内的软件。例如掌迅通,10game之类。
用CMNET,任何服务,网络,软件,都可以自由使用
3) WAP简介
WAP(Wireless Application Protocol)无线应用协议是一个开放式标准协议,它使用一种类似于HTML的标记式语言WML,相当于国际互联网上的HTML(超文件标记语言)并可通过WAP Gateway直接访问特定的网页。
WAP能够运行于各种无s线网络之上,如GSM、GPRS、CDMA1X等,即将开通的3G移动通信网络同样也支持WAP。打个比喻,GPRS和GSM都是马路,而WAP是在马路上的汽车,汽车上运输的货物,就是WAP上的网站内容了。
WAP只是一种GPRS应用模式,它与GRPS的接入方式是无关的。WAP应用采用的实现方式是“终端+WAP网关+WAP服务器”的模式
android判断2g|3g网络
可以通过ConnectivityManager获取当前网络连接状态,通过状态值判别当前网络连接
NetworkInfo info = conMan.getActiveNetworkInfo();
if(info !=null && info.getType() == ConnectivityManager.TYPE_MOBILE)
{
// NETWORK_TYPE_EVDO_A是电信3G
//NETWORK_TYPE_EVDO_A是中国电信3G的getNetworkType
//NETWORK_TYPE_CDMA电信2G是CDMA
//移动2G卡 + CMCC + 2//type = NETWORK_TYPE_EDGE
//联通的2G经过测试 China Unicom 1 NETWORK_TYPE_GPRS
if(info.getSubtype() == TelephonyManager.NETWORK_TYPE_GPRS
|| info.getSubtype() == TelephonyManager.NETWORK_TYPE_CDMA
|| info.getSubtype() == TelephonyManager.NETWORK_TYPE_EDGE){
System.out.println("mobile connected");
}
else{
System.out.println("type:"+info.getSubtype());
System.out.println("not mobile");
}
}else
System.out.println("not mobile connected");
通过getType的值可以得到以下2g|3g网络
我们使用Android设备连接网络时,如果是wap接入点就需要设置代理,而电信和移动联通的代理并不相同,移动和联通的wap代理都是10.0.0.172:80,电信的wap代理是10.0.0.200:80,所以进行Android开发时很有必要判断接入点。
Net网络:运营商(移动联通电信)net网络,wifi,usb网络共享
Wap网络:移动联通wap(代理相同:10.0.0.172:80),电信wap(代理:10.0.0.200:80)
这样看来就可以抽象出三种网络类型:联通移动wap,电信wap,其他的都是net类型。
package com.doit.ccp.wj.utils;
import com.doit.ccp.wj.app.App;
import android.content.Context; import android.database.Cursor; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.Uri; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.Log; /** * 类名:网络工具包 * 方法及作用: * 1.checkInternet():检查网络的连接状态 * @author ChenChunPeng * */ public class InternetUtil { private static final String tag = "InternetUtil"; private static Context mContext; private static NetworkInfo mNetInfo; private static ConnectivityManager cm; public static final String CTWAP = "ctwap"; public static final String CMWAP = "cmwap"; public static final String WAP_3G = "3gwap"; public static final String UNIWAP = "uniwap"; public static final int TYPE_NET_WORK_DISABLED = 0;// 网络不可用 public static final int TYPE_CM_CU_WAP = 4;// 移动联通wap10.0.0.172 public static final int TYPE_CT_WAP = 5;// 电信wap 10.0.0.200 public static final int TYPE_OTHER_NET = 6;// 电信,移动,联通,wifi 等net网络 private static final int TYPE_WIFI = 7; private static final int TYPE_NULL = -1; public static Uri PREFERRED_APN_URI = Uri .parse("content://telephony/carriers/preferapn"); /** * * @param context * @return -1表示没有联网 */ public static int getNetType(Context context){ cm = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE); mNetInfo = cm.getActiveNetworkInfo(); if(mNetInfo==null){ return -1; } if(mNetInfo !=null ){ if(mNetInfo.getType() == ConnectivityManager.TYPE_MOBILE){//非wifi // 判断是否电信wap: //不要通过getExtraInfo获取接入点名称来判断类型, // 因为通过目前电信多种机型测试发现接入点名称大都为#777或者null, // 电信机器wap接入点中要比移动联通wap接入点多设置一个用户名和密码, // 所以可以通过这个进行判断! //注:Android4.0及以后版本需要添加系统权限
final Cursor c = mContext.getContentResolver().query( PREFERRED_APN_URI, null, null, null, null); if (c != null) { c.moveToFirst(); final String user = c.getString(c .getColumnIndex("user")); if (!TextUtils.isEmpty(user)) { Log.i("", "=====================>代理:" + c.getString(c .getColumnIndex("proxy"))); if (user.startsWith(CTWAP)) { Log.i("", "=====================>电信wap网络"); return TYPE_CT_WAP; } } } c.close();
// 注意三: // 判断是移动联通wap: //其实还有一种方法通过getString(c.getColumnIndex("proxy")获取代理ip , //来判断接入点,10.0.0.172就是移动联通wap,10.0.0.200就是电信wap,但在 //实际开发中并不是所有机器都能获取到接入点代理信息,例如魅族M9 (2.2)等... // 所以采用getExtraInfo获取接入点名字进行判断 String netMode = mNetInfo.getExtraInfo(); Log.i("", "netMode ================== " + netMode); if (netMode != null) { // 通过apn名称判断是否是联通和移动wap netMode=netMode.toLowerCase(); if (netMode.equals(CMWAP) || netMode.equals(WAP_3G) || netMode.equals(UNIWAP)) { Log.i("", "=====================>移动联通wap网络"); return TYPE_CM_CU_WAP; }
}
}
} if(mNetInfo.getType() == ConnectivityManager.TYPE_WIFI){//wifi return TYPE_WIFI; } return TYPE_NULL; }
}
|
/**@param * 检查网络的连接状态, * 检查网络状态 */ public static boolean checkInternet(Context context ){ mContext = context; cm = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE); mNetInfo = cm.getActiveNetworkInfo(); if(mNetInfo==null){ return false; } boolean isConnected = mNetInfo.isConnected(); String net = mNetInfo.getTypeName(); Log.d(tag, "netType:"+net+" ,isConnected:"+isConnected); return isConnected; } /** * * @param context * @return -1表示没有联网 */ public static int getNetType(Context context){ cm = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE); mNetInfo = cm.getActiveNetworkInfo(); if(mNetInfo==null){ return -1; } if(mNetInfo !=null ){ int type = mNetInfo.getType(); if(type == ConnectivityManager.TYPE_MOBILE){//非wifi // 判断是否电信wap: Log.d(tag, "subType:"+mNetInfo.getSubtypeName()+"num:"+mNetInfo.getSubtype());
// 注意三: // 判断是移动联通wap: //其实还有一种方法通过getString(c.getColumnIndex("proxy")获取代理ip , //来判断接入点,10.0.0.172就是移动联通wap,10.0.0.200就是电信wap,但在 //实际开发中并不是所有机器都能获取到接入点代理信息,例如魅族M9 (2.2)等... // 所以采用getExtraInfo获取接入点名字进行判断 String netMode = mNetInfo.getExtraInfo(); Log.i("", "netMode ================== " + netMode); if (netMode != null) { // 通过apn名称判断是否是联通和移动wap netMode=netMode.toLowerCase(); if (netMode.equals(CMWAP) || netMode.equals(WAP_3G) || netMode.equals(UNIWAP)) { Log.i("", "=====================>移动联通wap网络"); return TYPE_CM_CU_WAP; } else if(netMode.equals(CTWAP)){ Log.i("", "=====================>电信wap网络"); return TYPE_CT_WAP; } else if(netMode.equals(CTNET)){ Log.i("", "=====================>电信NET网络"); return TYPE_CT_NET; } else if(netMode.equals(CMNET)){ Log.i("", "=====================>移动NET网络"); return TYPE_CM_NET; } else if(netMode.equals(UNINET)){ Log.i("", "=====================>联通NET网络"); return TYPE_UNINET; } }
} else if(type == ConnectivityManager.TYPE_WIFI){//wifi return TYPE_WIFI; }
}
return TYPE_NET_WORK_DISABLED; } |
下面给出了接入点判断的实例代码,其中进行了一些注解,都是一些在实际项目开发中需要注意的地方。分享给大家以供参考。
Java代码
String host = android.net.Proxy.getDefaultHost();
int port = android.net.Proxy.getDefaultPort();
if (host != null && port != -1) {
System.getProperties().setProperty("proxySet", "true");
System.setProperty("http.proxyHost", host);
System.setProperty("http.proxyPort", Integer.toString(port));
}
String host= Proxy.getDefaultHost();
int port = Proxy.getDefaultPort();
InetSocketAddress isa = new InetSocketAddress("10.0.0.172", 80);
java.net.Proxy p = new java.net.Proxy(java.net.Proxy.Type.HTTP, isa);
con=(HttpURLConnection) url.openConnection(p);
}
else
con =(HttpURLConnection) url.openConnection();
DefaultHttpClient httpClient=new DefaultHttpClient();
String host=Proxy.getDefaultHost();//此处Proxy源自android.net
int port = Proxy.getPort(context);//同上
HttpHost httpHost = new HttpHost(host, port);
//设置代理
httpClient.getParams().setParameter(ConnRouteParams.DEFAULT_PROXY,httpHost);
HttpGet httpGet=new HttpPost("www.baidu.com");
HttpResponse response=httpClient.execute(httpGet);
注:参考网络多篇文章加自己见解