首 页 | 新 闻 | Symbian | Android| Windows Mobile | J2ME | 下载中心 | 游戏策划招聘与求职 | 购书指南 | 视频教程
您现在的位置: 开发视界 >> Symbian >> 网络 >> 正文
Socket 引擎的设计与实现7
作者:Peter Ji…    文章来源:Symbian 中文技术周刊    更新时间:2005-12-28 16:39:24

3 由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()
    {
//读取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);
    }

相关文章:
视图命令处理与视图的切换
读取一行数据
S60 Python 编程指南——蓝牙连接( 手机到PC)
恢复IMEI,IMSI及网络信息(元Id,位置代码)第三版
怎样为SettingsList赋值
在S60"指示符面板"上显示小图标的解决方法
C++ Builder 初学问与答(10)
Symbian中同步socket用法
 

站点地图 | 加入收藏 | 联系站长 | 广告服务 |
QQ:280529124  Tel:0592-8271361 辽ICP备05021703号