Symbian 真机http上传下载文件

 
Symbian 真机 http 上传下载文件  Eddy,2007,5,10, 下午
 
最近一直做 symbian http 上传下载项目 , 在几个问题上面绕了个大弯 , 耽误了好长时间 , 现总结一下遇到的问题以及解决方法 , 为己为人 . 简单介绍一下基础知识 .
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 直接访问特定的网页。
WAP 能够运行于各种无线网络之上,如 GSM GPRS CDMA1X 等,即将开通的 3G 移动通信网络同样也支持 WAP 。打个比喻, GPRS GSM 都是马路,而 WAP 是在马路上的汽车,汽车上运输的货物,就是 WAP 上的网站内容了。
   WAP 只是一种GPRS应用模式,它与GRPS的接入方式是无关的。WAP应用采用的实现方式是“终端+WAP网关+WAP服务器”的模式
4)    symbian 开发中遇到的问题:
首先 是symbian的字符串问题:
    HBufC8* heapBuf = HBufC8::NewLC(fileLength);
    TPtr8 postData8 = heapBuf->Des();
    file.Read(postData8);
    注意: 此处是关键 , 费了一个礼拜 , 不能把文件直接生成入HBufC8,如HBufC8::NewLC(fileStream, fileLength)也没法得到,因为HBufC是不可以修改的, 用 Des() 返回一个可修改的指针TPtr8,然后读入文件file.Read(TPtr8),symbian没有提供可供修改的堆描述符HBuf.
    其次 是代理设置问题 .
     http symbian 真机上走的是 CMWAP, 需要设置 http 代理 , 代理 IP 地址是 :10.0.0.172, 端口是 :80
     在设置好代理后 , 发送 URL 连接 , 下面是 get 请求的程序代码 :
          
        TUriParser8 uri;
        uri.Parse(aUri);
 
    TBuf8<20> aProxy8(_L8("10.0.0.172:80"));
        RStringF iPrxAddr = iSession.StringPool().OpenFStringL(aProxy8);
        CleanupClosePushL(iPrxAddr);
 
        THTTPHdrVal iPrxUsage(iSession.StringPool().StringF(HTTP::EUseProxy,RHTTPSession::GetTable()));
        iSession.ConnectionInfo().SetPropertyL(iSession.StringPool().StringF(HTTP::EProxyUsage,RHTTPSession::GetTable()), iPrxUsage);
        iSession.ConnectionInfo().SetPropertyL(iSession.StringPool().StringF(HTTP::EProxyAddress,RHTTPSession::GetTable()), iPrxAddr);
        CleanupStack::PopAndDestroy();
 
        RStringF method = iSession.StringPool().StringF(HTTP::EGET,
              RHTTPSession::GetTable());
 
        iTransaction = iSession.OpenTransactionL(uri, *this, method);
 
        RHTTPHeaders hdr = iTransaction.Request().GetHeaderCollection();
// 原来的错误做法
//      _LIT8(KHost, "10.0.0.172:80");
//      SetHeaderL(hdr, HTTP::EHost, KHost);
//      SetOnLineHostHeader(iPrxAddr); // 添加 "X_OnLine_Host"
 
        SetHeaderL(hdr, HTTP::EUserAgent, KUserAgent);
        SetHeaderL(hdr, HTTP::EAccept, KAccept);
 
        iTransaction.SubmitL();
篮笔所示为设置 http 代理的程序 .
呵呵 , 终于搞定这个 http 程序了 .
 
: 我的开发环境 :symbian 7.0s+vc++6.0
   测试手机 :NOKIA6670
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值