Symbian socket 网络编程方法
2010-03-18 20:59:00 来源:WEB开发网另外一个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)向我们的主机(服务器)发送请求了。不过有一点,如果我们不向客户端告知我们的主机名称和端口号,那么客户端将永远无法访问到我们的服务器。
还要注意,因为我们的 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
更多精彩
赞助商链接