symbian中http的处理

来源:互联网 发布:word流程图制作软件 编辑:程序博客网 时间:2024/05/16 14:14

     虽说现在iphone还有android的的手机非常的火,当然了在上面开发应用的人肯定也不少,而symbian被讨论的似乎就少了,巧的是,现在自己还在学习symbian的开发,仔细想想也没有什么了,有过移动开发的经验,(注:工作时间长短不等于经验的多少)换一个平台,应该也可以很快上手的啊。何况自己刚开始的时候,从来也没有搞过symbian的开发,现在不也这样坚持过来了。因为symbian上面的开发确实比java的开发更难入门,看看symbian的sdk与java的jdk就可以有一个大概的了解.所以,无所谓了,symbian上面的开发可以进行,以后换作android的平台,我想也没有多大的问题了,必尽自己以经学习过j2se和j2ee了(越来越感觉到语言的无关性)哈哈,废话就不多说了,鼓励一下自己,继续前进!

   symbian上的http开发主要把握五个类,RHTTPSession, RHTTPTransaction, RHTTPHeaders, MHTTPDataSupplier, MHTTPFilter,(这个似乎不是很熟悉了).同样,根据http协议,我们知道先发送一个http request到指定的服务器,顺利的话,服务器得到响应,并返回消息到客户端。

 

    symbian中一个http的大概过程的框架就可以归结为如下:

1.打开一个session会话,RHTTPSession iSession; iSession.OpenL();

2.connection的设置:    设置connection的一些属性

3.打开一个事物,            RHTTPTransaction iTransaction;

                              iTransaction = iSession.OpenTransactionL(uri, *this, method);

第一个参数为TUriParser8类型,具体的url地址, this所对应的类需要继承MHTTPTransactionCallback,以便对请求得到响应时进行回调,第三个参数为请求的方法,如get或post请求.

4.添加请求头,通常在向服务发送请求的时候,我们会在请求里加上一些有用的头信息了,

RHTTPHeaders iHeaders = iTransaction.Request().GetHeaderCollection();

SetHeaders(iHeaders, key, value);   //key可以是int型,也可以是字符串型

void CHttpRequest::SetHeaders(RHTTPHeaders aHeaders, TInt aHdrField, const TDesC8& aHdrValue)
{
    RStringPool strPool = iSession.StringPool();
    RStringF strVal = strPool.OpenFStringL(aHdrValue);
    CleanupClosePushL(strVal);
    THTTPHdrVal headerVal(strVal);
    aHeaders.SetFieldL(strPool.StringF(aHdrField, RHTTPSession::GetTable()), headerVal);
    strVal.Close();
    CleanupStack::PopAndDestroy();
}

5.提交: iTransaction.SumbitL();

6.响应:MHTTPTransactionCallback的回调函数MHFRunL()和MHFRunError()

MHFRunL(RHTTPTransaction aHttpTransaction, const THTTPEvent &aEvent),里面有EGotResponseHeaders, EGotResponseBodyData, EGotResponseComplete, ESucceeded, EFailed,这几种情况

     至此,一个http过程就完成了,当然了得要处理相应的异常了,在实际的过程中,处理异常是相当的重要了,如没有信号,服务器中断,连接超时等等。为了更好地理解symbian的http具体处理过程,建议先把sdk中自带的例子先运行起来,然后再debug,这样也许可以更快地掌握。

     另外还有一个想要说明的是,在symbian的http处理过程中, 经常可以看到诸如:RStringPool和RStringF,这里解释一下:

有HTTP String Table一说(也就是http 字符串表),其中官方的说法是:a:Strings in the string table are constructed, copied and freed using RStringPool,可以看出,在String Table里的用RStringPool;

b:Strings not in the HTTP string table must be opened using RStringPool::OpenStringL() or RStringPool::OpenFStringL() and must be closed after use. 不在String Table里的必须用RStringPool的OpenStringL()方法或者是OpenFSringL()方法

 

 

原创粉丝点击