Symbian OS sockets API
2010-07-22 01:42:00 来源:WEB开发网(对上面已经定义的类而言,这个类仅仅接收一个客户端连接,那么请你不要对自己的创造力作任何限制地去想象和学习一下吧,你可以以这个类定义为基础,将他扩展为接收多个客户端连接的服务器吧!)
下面我们来看看连接过程是如何实现的。
做好接收客户端连接的准备
首先,在我们的服务器没有进行服务接入请求之前,我们要先创建两个socket,创建方法如下所示:
// Need to use two sockets - one to listen for// an incoming connection.err = iListen.Open(iSession, KAfInet,KSockStream, KUndefinedProtocol);User::LeaveIfError(err);// The second (blank) socket is required to// build the connection & transfer data.err = iSocket.Open(iSession);User::LeaveIfError(err);
一个socket叫做iListen,他扮演的就是‘监听者’的角色,用来监听是否有来自客户端的接入请求。iListen是一个和协议流关联的对象,在本例中这个协议就是TCP协议,因为我们使用的是Internet地址格式。
另外一个socket,叫做iSocket,在现在是被构造为空socket的,它仅仅在客户端连接请求的时候才会被准备好进入工作状态。这个socket就是用来处理来自客户端的任何请求,并且进行数据传输工作的。
那么下面,监听socket就可以去进行监听客户端连接请求的工作了。
请注意上面例子中使用的两个不同的RSocket::Open()函数的多态。
其中第一个,用在iListen成员变量的,它是用来进行客户端请求连接监听的,所以它需要一个本地地址,只有这样连接数据才能本正确地路由到该对象。
要设定本地地址,我们需要将一个地址和一个socket进行绑定(bind)操作:
// Bind the listening socket to the required// port.TInetAddr anyAddrOnPort(KInetAddrAny, KTestPort);iListen.Bind(anyAddrOnPort);
在本例中,我们并没有过多考虑socket的网络地址,因为我们使用的是易于操作的主机地址名称。尽管如此,我们还是需要指定端口号,这样才能完整确定一个绑定地址。
这个时候,客户端就可以通过我们的主机的Internet主机地址和端口号(事先在程序中用#define宏定义好了的 KTextPort)向我们的主机(服务器)发送请求了。不过有一点,如果我们不向客户端告知我们的主机名称和端口号,那么客户端将永远无法访问到我们的服务器。
更多精彩
赞助商链接