5.1.4客户端套接字对象请求连接到服务器端套接字对象 如果调用成功或者发生了 WSAEWOULDBLOCK错误, 当调用结束返回时,都会发生 FD CONNECT事件,MFC框架 会自动调用客户端套接字的 On connect事件处理函数,并将 错误代码作为参数传送给它。它的原型调用格式如下 virtual void On Connect( int n ErrorCode ) 对于流式套接字,初始化了与服务器的连接,套接字已准 备好发送接收数据;对于数据报套接字,仅仅设置了默认目 标,将用于随后的end0(或 recvfrom(函数
如果调用成功或者发生了WSAEWOULDBLOCK错误, 当调用结束返回时,都会发生FD_CONNECT事件,MFC框架 会自动调用客户端套接字的OnConnect()事件处理函数,并将 错误代码作为参数传送给它。它的原型调用格式如下, virtual void OnConnect( int nErrorCode ); 对于流式套接字,初始化了与服务器的连接,套接字已准 备好发送/接收数据;对于数据报套接字,仅仅设置了默认目 标,将用于随后的sendto( )或recvfrom( )函数。 5.1.4 客户端套接字对象请求连接到服务器端套接字对象
5.1.5服务器接收客户机的连接请求P115 在服务器端,使用 CAsyncSocket流式套接字对象,一般按 照以下步骤来接收客户端套接字对象的连接请求。 (1)服务器应用程序必须首先创建一个 CAsyncSocket流式 套接字对象,并调用它的 Create成员函数创建底层套接字句柄。 这个套接字对象专门用来监听来自客户机的连接请求,所以称 它为监听套接字对象。 (2)调用监听套接字对象的 Listen成员函数,使监听套接 字对象开始监听来自客户端的连接请求。此函数的调用格式是: BOOL Listen( int n Connection Backlog 参数 n Connection Backlog是等待队列最大处理连接请求数
在服务器端,使用CAsyncSocket流式套接字对象,一般按 照以下步骤来接收客户端套接字对象的连接请求。 (1)服务器应用程序必须首先创建一个CAsyncSocket流式 套接字对象,并调用它的Create成员函数创建底层套接字句柄。 这个套接字对象专门用来监听来自客户机的连接请求,所以称 它为监听套接字对象。 (2)调用监听套接字对象的Listen成员函数,使监听套接 字对象开始监听来自客户端的连接请求。此函数的调用格式是: BOOL Listen( int nConnectionBacklog = 5); 参数nConnectionBacklog是等待队列最大处理连接请求数。 5.1.5 服务器接收客户机的连接请求 P115
5.1.5服务器接收客户机的连接请求 Listen(函数启动后,监听套接字处于被动状态,如果有 客户端连接请求到来,就被确认( acknowledged),并被放 进监听套接字的等待队列中,排队待处理 当 Listen函数确认并接纳了一个来自客户端的连接请求后, 会触发 FD ACCEPT事件,监听套接字会收到通知,表示监 听套接字已经接纳了一个客户的连接请求,MFC框架会自动 调用监听套接字的 OnAccept事件处理函数,它的原型调用格 式如下 virtual void OnAccept( int n Error Code ) 编程者一般应重载此函数,在其中调用监听套接字对象的 Accept函数,来接收客户端的连接请求
Listen( )函数启动后,监听套接字处于被动状态,如果有 客户端连接请求到来,就被确认(acknowledged),并被放 进监听套接字的等待队列中,排队待处理。 当Listen函数确认并接纳了一个来自客户端的连接请求后, 会触发FD_ACCEPT事件,监听套接字会收到通知,表示监 听套接字已经接纳了一个客户的连接请求,MFC框架会自动 调用监听套接字的OnAccept事件处理函数,它的原型调用格 式如下: virtual void OnAccept( int nErrorCode ); 编程者一般应重载此函数,在其中调用监听套接字对象的 Accept函数,来接收客户端的连接请求。 5.1.5 服务器接收客户机的连接请求
5.1.5服务器接收客户机的连接请求 (3)创建一个新的空的套接字对象,不需要使用它的 Create函数来创建底层套接字句柄。这个套接字专门用来与客 户端连接,并进行数据的传输。一般称它为连接套接字,并作 为参数传递给下一步的Acep成员函数。 (4)调用监听套接字对象的Acep成员函数,调用格式为: virtual BOOLAccept( CasyncSocket& rConnectedSocket SoCKADDR IpSockAddr= null int*IpSockAddrlen= null) 参数1: r Connectedsocket服务器端新的空的套接字对象。 参数2: IpSockAddr,指向 SOCKADDR结构的指针,用来返 回所连接的客户机套接字的网络地址。 参数3 IpSockAddrlen,用来返回套接字网络地址长度
(3)创建一个新的空的套接字对象,不需要使用它的 Create函数来创建底层套接字句柄。这个套接字专门用来与客 户端连接,并进行数据的传输。一般称它为连接套接字,并作 为参数传递给下一步的Accept成员函数。 (4)调用监听套接字对象的Accept成员函数,调用格式为: virtual BOOL Accept( CAsyncSocket& rConnectedSocket, SOCKADDR* lpSockAddr = NULL, int* lpSockAddrLen = NULL ); 参数1 : rConnectedSocket,服务器端新的空的套接字对象。 参数2: lpSockAddr,指向SOCKADDR结构的指针,用来返 回所连接的客户机套接字的网络地址。 参数3: lpSockAddrLen,用来返回套接字网络地址长度。 5.1.5 服务器接收客户机的连接请求
5.1.5服务器接收客户机的连接请求 Accept函数的执行过程是:首先从监听套接字的待决队列 中取出第1个连接请求,使用与监听套接字相同的属性创建1个 新的套接字,用来与客户端建立连接。 如果调用Acep函数时,等待队列中没有待决的连接请求, Accept函数立即返回。 cOnnected Socket套接字对象仅用来与 连接的客户机套接字对象交换数据,而原来的监听套接字仍然 保持打开和监听状态。 Accept函数仅用于面向连接的流式套接字
Accept函数的执行过程是:首先从监听套接字的待决队列 中取出第1个连接请求,使用与监听套接字相同的属性创建1个 新的套接字,用来与客户端建立连接。 如果调用Accept函数时,等待队列中没有待决的连接请求, Accept函数立即返回。rConnectedSocket套接字对象仅用来与 连接的客户机套接字对象交换数据,而原来的监听套接字仍然 保持打开和监听状态。 Accept函数仅用于面向连接的流式套接字。 5.1.5 服务器接收客户机的连接请求