为使应用程序能捕捉和响应Socket事件,可以从CAsyncSocket创建自己的派生类。该类需要有自己版本的事件函数,也需要一种把此事件传到对话框的方法。为把每个事件传给对话框类、添加一个指向父对话框的指针作为Socket类的成员变量。对每个Socket事件使用此指针调用事件函数,当然首先要核实当时没有错误发生。
为在应用程序中创建此类,在“Sock Classes”上单击鼠标左键,从快捷菜单选择“New Class”菜单项。在New Class对话框中,类的类型默认值是MFC Class,不用管它。输入一个新类的名字,如CMySocket,从可用基类列表中选择CAsyncSocket,单击OK,即可把这个新类添加到应用程序中。
创建Socket类后,在该类中添加一个成员变量作为指向父对话框的指针。把变量类型指定为CDialog*,变量名为m_pWnd,访问方式为私有。然后需要在该类中添加一个成员函数以设置指针,把函数返回值类型指定为void,函数声明为SetParent(CDialog* pWnd),访问方式为公有。编辑该函数,将参数传递的指针赋值给成员变量指针,如程序清单6-2所示。
程序清单6-2 CMySocket::SetParent函数
最后,你的Socket类还必须添加事件函数,用于调用对话框类中名字相同的成员函数。为添加OnAccept事件函数,首先在CMySocket类上单击鼠标的右键,从快捷菜单中选择“Add Virtual Function…”菜单项,出现“New Virtual Override for Class CMySocket”对话框后,在对话框的左边列表中双击OnAccept将其添加到右边的列表中,然后单击OK按钮即可把OnAccept函数添加到CMySocket类中。编辑此函数,添加的代码如程序清单6-3所示。
程序清单6-3 CMySocket::OnAccept函数
采用与OnAccept函数类似的方法把其它的事件函数添加到CMySocket类中,如OnConnect、OnClose、OnReceive和OnSend函数。所有函数添加完后,应把对话框的头文件包含在CMySocket类中,如程序清单6-4所示。(www.xing528.com)
程序清单6-4 CMySocket的include语句
CMySocket类添加所有必要的事件函数后,应给对话框类添加一个CMySocket类变量。从服务器功能看,对话框类需要两个变量,一个用于监听连接请求,另一个用于与对方应用程序的连接。因为需要两个CMySocket对象,所以给对话框类需添加两个成员变量。把两个变量的类型指定为CMySocket类,访问方式两个都为私有。一个变量命名为m_sListenSocket,用于连接请求的监听,另一个命名为m_sConnectSocket,用于来回发送消息。
添加CMySocket变量后,添加所有变量的初始化代码。默认设置为,把应用程序类型设置成客户程序,服务器名为loopback,端口为4000。与这些变量一起,在两个CMySocket对象中设置的还有父对话框指针,指向对话框类对象。这可以通过对OnInitDialog函数添加以下代码完成,如同程序清单6-5所示。
程序清单6-5 CSockDlg::OnInitDialog函数
说明:计算机名loopback是TCP/IP网络协议的一个特殊名字,表示你正在这台计算机上工作。这个内部计算机名网址为127.0.0.1。需要与另一个程序连接,运行在同一台计算机上的应用程序都用此名字和网址。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。