WEB开发网
开发学院手机开发Symbian 开发 Symbian sockets 基本介绍 阅读

Symbian sockets 基本介绍

 2010-05-31 20:15:00 来源:WEB开发网   
核心提示:// Bind the listening socket to the required// port.TInetAddr anyAddrOnPort(KInetAddrAny, KTestPort);iListen.Bind(anyAddrOnPort);在本例中,我们并没有过多考虑socket的网络地址,Symbi

// Bind the listening socket to the required// port.TInetAddr anyAddrOnPort(KInetAddrAny, KTestPort);iListen.Bind(anyAddrOnPort);在本例中,我们并没有过多考虑socket的网络地址,因为我们使用的是易于操作的主机地址名称。尽管如此,我们还是需要指定端口号,这样才能完整确定一个绑定地址。

这个时候,客户端就可以通过我们的主机的Internet主机地址和端口号(事先在程序中用#define宏定义好了的KTextPort)向我们的主机(服务器)发送请求了。不过有一点,如果我们不向客户端告知我们的主机名称和端口号,那么客户端将永远无法访问到我们的服务器。

还要注意,因为我们的socket是使用Internet地址格式协议族进行打开操作的,所以我们调用Bind()函数时送入的函数参数TSockAddr就是一个TInetAddr类型的一个实例。

在TInetAddr类中,它除了保存TSockAddr中定义的一般性数据质紫外,还保存了一个TUint32类型的IP地址数据。在协议族属性中,TInetAddr类提供的永远是KAfInet值,因为该值表示这个地址是一个TCP/IP地址。

当完成了socket的建立,绑定了监听socket,我们就几乎完成了所有准备工作,可以相应来自任何客户端的连接请求。

下面我们就是需要把接入连接请求创建一个队列,这个时候我们需要调用RScocket::Listen()函数,另外还要注意我们应该使用长度为1的队列,之后我们看到连接是如何进行的时候,就会明白这个队列长度是足够了的。

void CModel::StartEngineL (void) { … // Listen for incoming connections... iListen.Listen(1); // and accept an incoming connection. // On connection, subsequent data transfer will // occur using the socket iSocket 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

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

Tags:Symbian sockets 基本

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