WEB开发网
开发学院手机开发Symbian 开发 Symbian socket 网络编程方法 阅读

Symbian socket 网络编程方法

 2010-03-18 20:59:00 来源:WEB开发网   
核心提示:iListen.Accept(iSocket, iStatus); SetActive(); ... }最后,我们调用异步函数RSocket::Accept()来准备接收客户端连接请求,Symbian socket 网络编程方法(12),那么我们再来回顾一下继承自活动对象CActive类的CModel类,当一个客户端连
iListen.Accept(iSocket, iStatus); SetActive(); ... }

最后,我们调用异步函数RSocket::Accept()来准备接收客户端连接请求。

那么我们再来回顾一下继承自活动对象CActive类的CModel类,当一个客户端连接到我们定义的服务器类的时候,CModel::RunL()函数将会被调用。

该函数被调用后的过程,请看下一部分。

处理连接请求

当一个客户端连接请求被收到的时候,最前线的RSocket::Accept()函数执行请求完成,然后活动对象的RunL()函数将会被调用,这一切步骤都是因为 CModel类是一个被激活状态的活动对象。

void CModel::RunL(void) { if (iStatus==KErrNone) { // Connection has been established NotifyEvent(EEventConnected); // Now need to start the receiver AO. iRxAO->RxL(iSocketType); } else // error condition ... }

那么假设现在所有步骤都是正常进行,那么我们获得的完成状态变量就是KErrNone。在上面的范例代码中,我们会向用户界面层传递一个连接建立成功的消息,然后我们启动活动对象,对接收到的数据进行处理,然后连接iSocket进行返回数据的准备。

因为我们进行操作的是一个异步系统,所以现在因为客户端和服务器是已经连接的状态,那么客户端可以在任何时间向服务器socket发送数据。所以我们需要在接收到数据之后,尽可能快地进行数据的处理。

有一点,在我们进行已连接的socket的数据发送的时候,我们并不会打开活动对象。数据仅仅会在客户端程序或者用户希望发送数据到客户端的时候,才进行操作。

使用有连接的socket

回顾一下我们前面定义的CModel 类,我们有一个成员变量,类型为CRx的iRxAO。

类CRx是一个继承自CActive的类,他也是一个活动对象。

CRx 类的成员函数RxL(),定义如下;这个函数向连接到我们的服务器的客户端发出了一个一个异步请求。

void CRx::RxL ( ) //class CRx derived from CActive { // Issue read request iSocket->RecvOneOrMore(iDataBuffer, 0, iStatus, iRecvLen); SetActive(); }

函数 RecvOneOrMore()将会在稍后,和其他一些读取以及写入socket的函数一同进行讨论。

在接入数据请求完成的时候,CRx::RunL()函数将会被调用,完成后返回的内容有完成状态事件以及新收到的数据内容。

上一页  7 8 9 10 11 12 13 14 15 16 17  下一页

Tags:Symbian socket 网络编程

编辑录入:coldstar [复制链接] [打 印]
赞助商链接