Chinaunix首页 | 论坛 | 博客
  • 博客访问: 686020
  • 博文数量: 845
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 5015
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-15 16:22
文章分类

全部博文(845)

文章存档

2011年(1)

2008年(844)

我的朋友

分类:

2008-10-15 16:29:32

  由socket读取数据
SymbianOS客户端API以异步请求的方式实现读取操作.此示例使用一个active object CSocketsReader来调度这些请求.

1.调用CSocketsReader::Start 函数,启动active object.
void CSocketsReader::Start()
    {
// 读取socket数据到iBuffer
if (!IsActive())
        {
        IssueRead();
        }
    }

2-4.调用CSocketsReader::IssueRead通过RSocket::RecvOneOrMore函数向
socket server 发送一个读取请求.而后 SetActive()
void CSocketsReader::IssueRead()
    {
file://读取socket数据到iBuffer
    __ASSERT_ALWAYS(!IsActive(), User::Panic(KPanicSocketsEngineRead,
ESocketsBadState));
    iSocket.RecvOneOrMore(iBuffer, 0, iStatus, iDummyLength);
    SetActive();
    }

5.当至少有1byte数据读入缓冲时,RSocket::RecvOneOrMore请求完成,调用
CSocketsReader::RunL 函数
void CSocketsReader::RunL()
    {
switch (iStatus.Int())
        {
case KErrNone:
// 字符已由 socket 读取
            iEngineNotifier.ResponseReceived(iBuffer);
            IssueRead();  // 启动下一读取任务
break;
case KErrDisconnected:
            iEngineNotifier.ReportError(MEngineNotifier::EDisconnected,
                                        iStatus.Int());
break;
default:
            iEngineNotifier.ReportError(MEngineNotifier::EGeneralReadError,
                                        iStatus.Int());
break;
        }
    }

6-7.使用CSocketsEngine::ResponseReceived函数通知Engine 数据已读取,启动下一读取请求.
void CSocketsEngine::ResponseReceived(const TDesC8& aBuffer)
    {
    iConsole.PrintNotify(aBuffer);
    }

【责编:Luzi】

--------------------next---------------------

阅读(271) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~