大隐于市

用艺术的眼光看待编程!

用户操作
[即时聊天] [发私信] [加为好友]
孙东风ID:dongfengsun
137040次访问,排名595好友5人,关注者41
03年从西安交通大学毕业后一直从事移动平台的开发工作。崇尚一切自由的东西,热爱交流。目前专注于手机二维码技术研究并负责技术管理工作,希望能和同行认识、交流、共享。
dongfengsun的文章
原创 74 篇
翻译 2 篇
转载 33 篇
评论 163 篇
孙东风的公告
原创文章转载请注明出处
QQ :372590353
MSN:sundongfeng1227@hotmail.com
  我的EMAIL



最近评论
xyz90830:可要知道手机平台太繁多了~要做普遍得很大财力 物力
xyz90830:可要知道手机平台太繁多了~要做普遍得很大财力 物力
thesameway:51旧书网 同城易书
www.51jiushu.com
www.51jiushu.net
二手书、旧书同城交易平台
分类齐全、快速发布、准确搜索
Microsoft_China_Vip:


www.soAsp.net 编程学习网 技术+ 实例应用 讲解不错。 推荐大家!

有很多 技术资料也很好!



KING:这个我早给我们老板提过了 他对此认同 但是觉得现阶段没必要做 哎 我们公司还做手机软件的 可惜了啊
文章分类
收藏
    相册
    存档
    订阅我的博客
    XML聚合  FeedSky

    原创 一个http upload问题收藏

    新一篇: symbian数据类型转换 | 旧一篇: 一个活动对象的测试例子

    huananshi

    2005-12-01, 11:23

    我原来在GetNextDataPart直接把想要传的数据upload
    aDataPart.set(/*
    整个数据*/)


    没有出现任何问题,

    我现在想把文件分成n块传送,块长度为1k
    TBool CHttpEngine::GetNextDataPart(TPtrC8& aDataPart)
    {
    TInt iLen = iPostData->Length() - iDataChunkCount * 1024;
    if(iLen > 1024)
    iReqBodySubmitBufferPtr = iPostData->Mid(iDataChunkCount * 1024, 1024) ;
    else if(iLen>=0 )
    iReqBodySubmitBufferPtr = iPostData->Mid(iDataChunkCount * 1024, iLen) ;

    aDataPart.Set(iReqBodySubmitBufferPtr);
    ++iDataChunkCount;

    return !(iLen - 1024 >0) ;
    }
    void CHttpEngine::ReleaseData()
    {
    TPtr8 buff = iReqBodySubmitBuffer->Des();
    buff.Zero();
    TRAPD(err, iTransaction.NotifyNewRequestBodyPartL());
    }
    TInt CHttpEngine::OverallDataSize()
    {
    if(iPostData)
    return iPostData->Length();
    else
    return KErrNotFound ;
    }

    这三个函数我都重载了,可为什么发完最后的包,执行并没有按预期的那样接收到消息并跳到
    void CHttpEngine::MHFRunL(RHTTPTransaction aTransaction,
    const THTTPEvent& aEvent)

    而是直接非法关闭了,我用一个1577byte长度的文件测试,执行了两次 getnextdatapart,每步我都仔细看过,并没发现任何错误, 知道这是什么问题?我还对比了例子HTTPEXAMPLECLIENT ,也没找到原因,谢谢各位了!

    beover1984

    2005-12-02, 02:17

    检查一下GetNextDataPart(TPtrC8& aDataPart)的返回值是不是对你的程序逻辑有影响,然后你再发一个1024大小的文件试试.

    huananshi

    2005-12-02, 02:27

    不好意思,我没理解您的意思,GetNextDataPart不是s60自己调用的么,什么情况下会对我程序的逻辑有影响?我发的数据包括http的一些信息,总共是1577,如果只发一个文件为1024的不行吧?您的意思是不是说加上包头信息总共是1024个字节的大小?

    beover1984

    2005-12-02, 03:50

    void CHttpEngine::ReleaseData()
    {
    TPtr8 buff = iReqBodySubmitBuffer->Des();
    buff.Zero();
    TRAPD(err, iTransaction.NotifyNewRequestBodyPartL());
    if (err != KErrNone) //
    加上这句判断err的值是什么

    {
    //
    出错处理
    }
    }

    huananshi

    2005-12-02, 04:12

    始终是0,稍等,我正用小于1024的文件测试,出现正常上传和非法两种情况了,哈,离胜利近了一步:)

    huananshi

    2005-12-02, 04:27

    晕!!小于1024的文件,如果在ReleaseData()函数中不调用iTransaction.NotifyNewRequestBodyPartL()执行就没问题,一调用这个函数肯定出错,
    而我的err 始终= 0 没错。。。。。我分块的数据有问题么?我的理解是就把整个包当成一个数据buffer,况且一个1024以下的数据,一次传过去怎么也会出错呢???

    huananshi

    2005-12-02, 04:49

    应该不是我代码里的错误吧??出错的时候我看了call stack,并没有我的代码,我觉得倒象是崩在s60的某个lib里,所有相关的代码我都下断点了,并没有一个断下来的,应该是s60内部处理的一个错误....我搞s60的过程中多次遇到这种死到s60里的情况,每次遇到这种问题,都没办法解决,也不知道问题出在什么地方,最后就只能换种方式了....难道s60的调试查错能力就只有这种程度啊? 但是这回我这个分块的功能却没有别的办法绕开,只能把这个bug找出来,没有别的办法了么?今天可周末了啊,屁股没开净,周末会过的很难受的:(

    huananshi

    2005-12-02, 05:20

    哈哈,解决了!!问题找到了!!!
    NotifyNewRequestBodyPartL()
    void NotifyNewRequestBodyPartL(THTTPFilterHandle aStart=THTTPFilterHandle::EClient);
    Description
    Notifies the framework of the availability of more request body data.

    This is used when submitting body data in several parts.

    其实函数说明说的也算清楚,当还有数据没传完的时候才调用此函数,所以说,当getnextdatapart函数最后一步返回true的时候ReleaseData()就不应该再调用NotifyNewRequestBodyPartL()!可是最可气的是,httpexample本身就是错的,竟然没有此判断!!!!误导我一直再怀疑是不是自己的代码有内存泄漏,或是NotifyNewRequestBodyPartL的默认参数是否需要修改...还好算是解决了,谢谢beover1984 的帮忙,论坛需要你这样的热心人,非常感谢:)

      

    发表于 @ 2007年01月25日 13:12:00|评论(loading...)|编辑

    新一篇: symbian数据类型转换 | 旧一篇: 一个活动对象的测试例子

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 孙东风