1.什么是WAP和NET

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

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

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

     所以在手机设置中要看好自己这种的接入点是什么,
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专用播放器就可以看在线视频了。流畅度一般但是比诺基亚要好的多。很方便。

 

import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.URL;/**
下载器
 */
public class DownloadUtil {
 private static final String TAG = "Downloader"; /**
下载
  */
 public static HttpURLConnection download(String url) {
  HttpURLConnection conn = null;
  try {
   String proxyHost = android.net.Proxy.getDefaultHost();
如果是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

无论是移动、联通还是电信,都至少提供了两种类型的的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;

1.3

CMNET和CMWAP


1) GRPS接入方式:

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

2) CMNET和CMWAP区别:

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直接访问特定的网页。

能够运行于各种无s线网络之上,如GSM、GPRS、CDMA1X等,即将开通的3G移动通信网络同样也支持WAP。打个比喻,GPRS和GSM都是马路,而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网络,wifi,usb网络共享

网络:移动联通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;
/**
类名:网络工具包
方法及作用:
检查网络的连接状态
 * @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
表示没有联网
 */
public static int getNetType(Context context){
cm = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE); 
mNetInfo = cm.getActiveNetworkInfo();
if(mNetInfo==null){
return -1;
}
 if(mNetInfo !=null ){
非wifi
判断是否电信wap:    
不要通过getExtraInfo获取接入点名称来判断类型,    
因为通过目前电信多种机型测试发现接入点名称大都为#777或者null,    
电信机器wap接入点中要比移动联通wap接入点多设置一个用户名和密码,    
所以可以通过这个进行判断!    
//注:Android4.0及以后版本需要添加系统权限
<user-permission android:name = android.permission.WRITE_APN_SETTINGS/>
 
          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)) {    
电信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)) {    
移动联通wap网络");    
              return TYPE_CM_CU_WAP;    
            }    
  
          }    
  
        }    
  
  }
  if(mNetInfo.getType() ==  ConnectivityManager.TYPE_WIFI){//wifi
 return TYPE_WIFI;
 }
  return TYPE_NULL;
}

 
}

 

/**@param 
 * 检查网络的连接状态,
 * 检查网络状态
 */

public static boolean
mContext
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
}
/**
 * 
 * @param context
 * @return -1表示没有联网
 */
public static int
cm = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE); 
mNetInfo = cm.getActiveNetworkInfo();
if(mNetInfo==null){
return
}
if(mNetInfo !=null
int type = mNetInfo.getType();
if(type ==  ConnectivityManager.TYPE_MOBILE){//非wifi
// 判断是否电信wap:    
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获取接入点名字进行判断    
mNetInfo.getExtraInfo();    
"", "netMode ================== "
if (netMode != null) {    
// 通过apn名称判断是否是联通和移动wap    
            netMode=netMode.toLowerCase();    
if (netMode.equals(CMWAP) || netMode.equals(WAP_3G) || netMode.equals(UNIWAP)) {    
"", "=====================>移动联通wap网络");    
return TYPE_CM_CU_WAP;    
            }  
else if(netMode.equals(CTWAP)){
"", "=====================>电信wap网络");    
return TYPE_CT_WAP;  
            }
else if(netMode.equals(CTNET)){
"", "=====================>电信NET网络");    
return TYPE_CT_NET;  
            }
else if(netMode.equals(CMNET)){
"", "=====================>移动NET网络");    
return TYPE_CM_NET;  
            }
else if(netMode.equals(UNINET)){
"", "=====================>联通NET网络");    
return TYPE_UNINET;  
            }
          }    
  
        }
else if(type ==  ConnectivityManager.TYPE_WIFI){//wifi
return TYPE_WIFI;
 }
  
 }
  
return TYPE_NET_WORK_DISABLED;
}

        下面给出了接入点判断的实例代码,其中进行了一些注解,都是一些在实际项目开发中需要注意的地方。分享给大家以供参考。


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("<a href="http://www.baidu.com">www.baidu.com</a>");
HttpResponse response=httpClient.execute(httpGet);


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