在blackberry的開發中,網絡相關的設置有時候比較令人困惑,下面是一篇關於網絡設置編程的文章
BlackBerry上連接HTTP或Socket的五種方式
BlackBerry 的API提供了五種方式來進行HTTP或者socket連接,包括:
1, BlackBerry Enterprise Server(BES)方式
這種方式通過使用BES的BlackBerry MDS Services來進行網絡連接,BlackBerry MDS Services負責處理所有的瀏覽器請求或者連接請求、並負責數據加密,這是黑莓手機的默認連接方式,如下:
例1: (HttpConnection) Connector.open("http://www.testserver.com");
以上代碼會自動將BlackBerry MDS Services作爲它的默認連接路徑。實際開發中,如果要確保應用程序使用uses BlackBerry MDS Services作爲它的連接路徑,需要在URL最後加上參數“deviceside=false”,這也是我們推薦的方式,如下:
例2: (HttpConnection)Connector.open(“http://www.testserver.com;deviceside=false”);
2, BlackBerry Internet Servie方式
這種方式是爲第三方提供的連接接口,它對數據不進行加密,用戶可以通過使用HTTPS和SSL來進行安全的連接。注:目前僅對加入了BlackBerry Alliance Program的第三方開放合作伙伴開放,詳情參考:http://na.blackberry.com/eng/partners/alliance.jsp
3, Direct TCP方式
這種方式允許在沒有使用BlackBerry MDS的黑莓手機上直接TCP連接。爲了能啓用direct TCP方式,用戶需要在手機的“選項-高級選項-TCP/IP”中設置APN,以及相應的用戶名和密碼。
注1:運行在iDEN網絡上的黑莓手機(包括6510、7510、7520和7100i),如果不指定deviceside參數(如例1),默認的連接是direct TCP;非運行在iDEN網絡上的其他黑莓手機,如果不指定deviceside參數,默認的連接是BlackBerry MDS。
注2:如果連接時BlackBerry MDS不存在,黑莓手機也會自動採用direct TCP方式。
因此,如果要將direct TCP作爲黑莓手機的默認連接方式,我們建議在URL中加入“deviceside=true”參數,如下:
例3: (StreamConnection)Connector.open("socket://testserver:600;deviceside=true");
4, Wi-Fi
如果需要在Wi-Fi上創建網絡連接,不需要在應用程序中考慮特別的底層邏輯,可以在URL中加入參數“interface=wifi”就能實現Wi-Fi連接,如下:
例4:(StreamConnection)Connector.open(“socket:// testserver:600;interface=wifi”);
5, WAP 1.x
並不是所有的移動運營商都支持通過WAP網關進行連接的,所以如果要創建WAP連接,開發者需要和移動運營商聯繫,獲取是否提供這種支持、並且獲取他們的WAP網管參數。
以下是一個基於WAP網關進行HTTP連接的例子:
例5: (HttpConnection)Connector.open("http://wap.google.com;WAPGatewayIP=127.0.0.1;WAPGatewayAPN=carrier.com.gprs");
注:其中WAPGatewayIP 和WAPGatewayAPN這兩項參數必須指定,參數之間用“;”隔開,以下是所有的WAP參數列表,實際開發時請根據運營商提供的信息決定哪些參數需要設置。
Parameter |
Description |
WapGatewayIP |
IP address of the gateway. |
WapGatewayAPN |
APN for General Packet Radio Service (GPRS) networks only. For testing purposes, you can use rim.net.gprs |
WapGatewayPort |
Gateway port value. If port 9203 is specified, Wireless Transport Layer Security (WTLS) is used unless WapEnableWTLS=false is specified. |
WapSourceIP |
IP address of the source. |
WapSourcePort |
Source port value. |
TunnelAuthUsername |
User name for APN session, when Password Authentication Protocol (PAP) or Challenge Handshake Application Protocol (CHAP) authentication is used. |
TunnelAuthPassword |
Password for APN session, when PAP or CHAP authentication is used. |
WapEnableWTLS |
Explicitly turns on or turns off WTLS. If this parameter is not specified, WTLS is used by default for connections to port 9203. |
6. WAP 2.0
如果要連接WAP2.0的網關,需要在連接時指定service record、以及UID。以下代碼說明了WAP2.0的連接時如何工作的:
例5:
ServiceBook sb = ServiceBook.getSB();
ServiceRecord[] records = sb.findRecordsByCid("WPTCP");
String uid = null;
for(int i=0; i < records.length; i++)
{
//Search through all service records to find the
//valid non-Wi-Fi and non-MMS
//WAP 2.0 Gateway Service Record.
if (records[i].isValid() && !records[i].isDisabled())
{
if (records[i].getUid() != null && records[i].getUid().length() != 0)
{
if ((records[i].getUid().toLowerCase().indexOf("wifi") == -1) &&
(records[i].getUid().toLowerCase().indexOf("mms") == -1))
{
uid = records[i].getUid();
break;
}
}
}
}
if (uid != null)
{
//open a WAP 2 connection
Connector.open(_url + ";ConnectionUID=" + uid);
}
else
{
//Consider another transport or alternative action.
}
1, 爲什麼基於WAP連接的應用在未激活BES的手機上測試沒問題,在激活BES的手機上連接不上?
答:在連接時採用的是本文例1的連接方式。解決方案是改爲採用本文例5的連接方式。
2, 通過Wi-Fi如何連接到BES,BIS?可以直接連接到其他目的地址麼?
答: Wi-Fi可以通過BBI連接到BES和BIS,也可以通過在Wi-Fi上配置VPN直接連接到BES。也可以繞開BBI、BES和BIS直接連接到其他server。