Symbian OS sockets API
2010-07-22 01:42:00 来源:WEB开发网有一点,在我们进行已连接的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()函数将会被调用,完成后返回的内容有完成状态事件以及新收到的数据内容。
那么再来回顾一下CModel类的另外一个成员变量,类型为CTx的iTxAO。
类CTx是一个继承自CActive的类,他也是一个活动对象。
CTx类的成员函数TxL(),如下所示;他想连接到服务器的客户端进行了一个发送数据的一部请求操作。
void CTx::TxL (TDesC& aData) { if (!IsActive()) { // Take a copy of the data to be sent. iDataBuffer = aData; // Issue write request iSocket->Send(iDataBuffer, 0, iStatus); SetActive(); } }
Send()函数将会在稍后,和其他一些读取以及写入socket的函数一同进行讨论。
当数据发送请求完成的时候,CTx::RunL()函数将会被调用,同时返回的内容有发送操作完成的结果状态。
传输数据
现在我们来看看两台网络设备之间,究竟是如何利用socket来进行数据传输的。
如我们以前所知,在socket通信中,数据报通信和数据流通信是两种十分不同的通信方式。
无论我们使用的是数据报还是数据流的传输方式,每一个独立的数据单元在网络通信的两端被传输的时候都有可能经过十分不同的路由路径,因为在网络通信的双方之间总有着不计其数的子网络,而通信双方对数据单元的路由方向是无法控制的。这种情况是十分普遍而且正常的,由于数据流的传输方式也是以数据报形式为基础的,所以从这个角度来看的话,二者的路由特点是一致的。
更多精彩
赞助商链接