WAP和NET的區別:
(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網關從技術的角度講,只是一個提供DaiLi服務的主機,它不一定由網絡運營商提供。但據我所知,中國移動GPRS網絡目前只有唯一的一個 WAP網關:10.0.0.172,有中國移動提供,用於WAP瀏覽(HTTP)服務。有一點需要注意,WAP網關和一般意義上的局域網網關是有差別的, 標准的WAP網關僅僅實現了HTTPDaiLi的功能,並未完成路由、NAT等局域網網關的功能。這就決定了它在應用上所受到的限制。
(3) 中國移動對CMWAP的限制
為了從應用中區別兩者的定位,中國移動對CMWAP作了一定的限制,主要表現在CMWAP接入時只能訪問GPRS網絡內的IP(10.*.*.*), 而無法通過路由訪問Internet。(少數地區的移動網絡可能不存在這一限制。)我們用CMWAP瀏覽Internet上的網頁就是通過WAP網關協議 或它提供的HTTPDaiLi服務實現的。
說到這里,就讓我自然而然的聯想到公司的網絡,相信不少工作的朋友都有類似的體會。公司的網絡在網關上不提供路由和NAT,僅僅提供一個可以訪問外網 的HTTPDaiLi。這樣,我們就無法直接使用QQ、MSN等非HTTP協議的應用軟件了(好在它們還提供的有HTTPDaiLi的連接方式)。 CMWAP也正是如此。
(4) 適用范圍
適用范圍才是大家最關心的問題。CMNET擁有完全的Internet訪問權,這里就不多說了,主要讓我們來看看CMWAP。因為有了上面提到的限 制,CMWAP的適用范圍就要看WAP網關所提供的支持了。目前,中國移動的WAP網關對外只提供HTTPDaiLi協議(80和8080端口)和WAP 網關協議(9201端口)。
因此,只有滿足以下兩個條件的應用才能在中國移動的CMWAP接入方式下正常工作:
1. 應用程序的網絡請求基於HTTP協議。
2. 應用程序支持HTTPDaiLi協議或WAP網關協議。
如何辨別一個應用程序的網絡請求是否基於HTTP協議?
這個問題還真不好回答,要完全做到這一點需要通過攔截應用程序的通信數據包進行分析。這里提供幾個簡單的方法給廣大菜鳥朋友:從表現上看,如果它的網 絡請求是網址(URL)的形式,那么通常是基於HTTP協議的,如Web瀏覽器;如果它連接的服務器端口是80,那么它可能是基於HTTP協議的。如果確 實無法准確判斷,那么請直接看下一個條件。(滿足第二個條件的應用一定是基於HTTP協議的)
如何區別一個應用程序支持HTTPDaiLi協議還是WAP網關協議呢?
首先看它的設置中有沒有DaiLi服務器的選項(通常在S60上未特別說明的DaiLi都是特指HTTPDaiLi),如果有則表示它支持HTTPDaiLi協議。如果沒有,則需要按照以下步驟測試:
在GPRS接入點設置的高級設置里去掉DaiLi服務器的設置項:Server Address 和 Server Port,如果應用程序可以正常工作,那么它是基於WAP網關協議,如Java程序、S60內置的瀏覽器。如果在此狀態下不能正常工作,而恢復GPRS接 入點高級設置中的DaiLi服務器設置后能夠正常工作,則應用程序支持HTTPDaiLi協議(DaiLi設置從系統中讀取)。如果仍不能正常工作,那么 這個應用程序一般來說是不支持HTTPDaiLi協議或WAP網關協議的。
package com.aoran.util;
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;
}
}