NET、wap网络的区别



1.什么是WAPNET

CMNETCMWAP都是手机上网使用的接入点的名称。
联通等运营商也有类似区别的服务。

这里以移动的CMNETCMWAP为例,他们的区别是:
通过CMNET可以获得完全的Internet访问权,可以访问popimap等众多互联网服务; 
通过CMWAP只能访问网页,无法访问popimap等众多互联网服务。

CMWAPCMNET费用和设置:
  CMWAPCMNET是移动的两种接入点,分别包含在各种套餐中,CMWAP是比较便宜的,
     CMNET较贵,但是因为是标准的互联网协议,他的特点是快。

     所以在手机设置中要看好自己这种的接入点是什么,
     如果你仅仅包了cmwap但是使用了cmnet,会产生额外并且巨大的费用。

(1) 为什么会有两个接入点?
  在国际上,通常只有一种GPRS接入方式,为什么在中国会有CMWAPCMNET两兄弟呢?(彩信之所以单独配置接入点是因为彩信服务需要连接专用的服务器,在这里不作探讨。)
  其实,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网络内的IP10.*.*.*),而无法通过路由访问Internet。(少数地区的移动网络可能不存在这一限制。)我们用CMWAP浏览Internet上的网页就是通过WAP网关协议或它提供的HTTP代理服务实现的。
  说到这里,就让我自然而然的联想到公司的网络,相信不少工作的朋友都有类似的体会。公司的网络在网关上不提供路由和NAT,仅仅提供一个可以访问外网的HTTP代理。这样,我们就无法直接使用QQMSN等非HTTP协议的应用软件了(好在它们还提供的有HTTP代理的连接方式)。CMWAP也正是如此。
  (4) 适用范围
  适用范围才是大家最关心的问题。CMNET拥有完全的Internet访问权,这里就不多说了,主要让我们来看看CMWAP。因为有了上面提到的限制,CMWAP的适用范围就要看WAP网关所提供的支持了。目前,中国移动的WAP网关对外只提供HTTP代理协议(808080端口)和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包月你下载uc71在下个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加了代理,上次就是没看到这份代码,要不也不用改动那么大了。

1.2

无论是移动、联通还是电信,都至少提供了两种类型的的APNWAP方式和NET方式。其中NET方式跟WIFI方式一样,无需任何设置,可自由访问所有类型网站,而WAP方式,需要手机先设置代理服务器和端口号等信息,并且只能访问HTTP协议类型的网站。

1) 移动的WAP名称是CMWAPNET名称是CMNET

2) 联通的WAP名称是UNIWAPNET名称是UNINET;联通3GWAP名称是3GWAPNET名称是3GNET

3) 电信的WAP名称是CTWAPNET名称是CTNET

其中,移动和联通的WAP代理服务器都是10.0.0.172,端口号是80;而电信的WAP代理服务器是10.0.0.200,端口号是80

Android系统中,对于APN网络的API是隐藏的,因此获取手机的APN设置,需要通过ContentProvider来进行数据库查询,查询的URI地址是:

取得全部的APN列表:content://telephony/carriers

取得当前设置的APNcontent://telephony/carriers/preferapn

取得current=1APNcontent://telephony/carriers/current

1.3

CMNET和CMWAP

分类: Android2011-02-25 13:59 405人阅读 评论(0) 收藏 举报

wapinternet中国移动网络手机access

1) GRPS接入方式:

  CMNET CMWAP是中国移动GPRS网络的两个不同APN(Access Point Name接入点名称)CMNET提供了NAT服务,使用该服务的手机可以直接访问internetCMWAP只提供了WAP代理和HTTP代理,手机上网能访问的范围有限,接入时只能访问GPRS网络内的IP(10***)。因此CMWAP主要用于手机WAP上网,CMNET则是用于PC,笔记本电脑,PDA等设备实现GPRS上网。两者手机上网的方式没有差别,如此划分是中国移动对手机上网服务对象的定位不同,所以他们的应用范围和资费标准不同。

  2) CMNETCMWAP区别:

  A:CMWAP只开放80,8080,9201端口,适合http,wap访问 (10.0.0.172起初是做为CSD方式的无线接入的网关,那时使用的是9201端口,运行的是WAP(Wireless Access Protocal)一种专门的无线终端访问数据网络的羞议。它的作用其实更多的是作为Mobile NetworkInternet之间的网关,将无线终端的WAP address请求递交给DNS解析,然后重定向至WAP站点。

  进入GPRS时代后10.0.0.172开始作为proxy使用开放了80端口,仍然承载WAP并开始提供更多的服务,例如:MMSHTTP。手机这时其实更象是局域网中使用proxyInternet address上网的设备)

CMNET适合象socket等非http请求访问.

  B: CMNET可以把他想象成PC上的直接连接INTERNET。如果用CMNET接入点,可以直接上INTERNET

CMWAP就相当于PC上的局域网。中国电信只针对CMWAP开放2个端口,就是809201,如果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线网络之上,如GSMGPRSCDMA1X等,即将开通的3G移动通信网络同样也支持WAP。打个比喻,GPRSGSM都是马路,而WAP是在马路上的汽车,汽车上运输的货物,就是WAP上的网站内容了。

 WAP只是一种GPRS应用模式,它与GRPS的接入方式是无关的。WAP应用采用的实现方式是“终端+WAP网关+WAP服务器”的模式

 

2.判断网络类型

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网络

 

2.1

我们使用Android设备连接网络时,如果是wap接入点就需要设置代理,而电信和移动联通的代理并不相同,移动和联通的wap代理都是10.0.0.172:80,电信的wap代理是10.0.0.200:80,所以进行Android开发时很有必要判断接入点。

       接入点的类型

       Net网络:运营商(移动联通电信)net网络,wifiusb网络共享

       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就是移动联通wap10.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代码

 

3.wap上网设置代理

3.1全局方式

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));
}

3.2HttpUrlConnection方式

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();

3.3 HttpClient方式

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);



注:参考网络多篇文章加自己见解

你可能感兴趣的:(Android网络)