在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。