您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 网络软件设计9——MFC
网络软件设计MFC程序设计与Socket制作主讲段景山段景山2MFC(MicrosoftFoundationClass)C++?类?段景山3MFC用户程序结构使用MFC建立的程序仍然是Win32程序MFC用户程序结构与Win32App有所不同WinMain事件WndProcWinMainOnClickOnEventOnXxx。。。事件WndProc循环与等待段景山4MFC的消息映射(MessageMap)VC集成开发环境利用MFC类库,对程序员屏蔽了WndProc()函数程序员只需要关心设计什么消息,及消息的处理函数。至于消息是如何分发处理的,不需要关心。对程序员而言,消息映射似乎取代了WndProc()--窗口函数的作用structMSGMAP_ENTRY_messageEntries[]={WM_CREATE,OnCreate,WM_COMMAND,OnCommand,WM_DESTORY,OnDestroy,}消息消息处理程序段景山5例用MFC新建一个工程新建MFCAPP选择DialogBased选择连接windowssocket库观察建立工程后,给出的例程中,是否能看到WinMain、消息循环和消息处理函数?没有看到是否就意味着程序中没有这些过程呢?原因何在?段景山6例主题:实现界面交互(输入、输出)制作界面控件——界面设计ResourceView给控件增加成员变量——界面抽象变量ClassWizard变量与界面交互——界面控制对变量的操作Updatedata()段景山7例点击测试前段景山8例点击测试后段景山9例界面设计段景山10用MFC制作一个服务器对话框主要解决的问题如何从EditBox中取得数据如何在EditBox中显示接收数据?控件的抽象可为EditBox控件生成关联的成员变量——实现控件的抽象。可根据数据类型决定变量类型,通过选择在membervariables选择控件ID,然后AddVariableCstring--字符串UINT--无符号整数IDC_INPUT-m_inputIDC_OUTPUT-m_output段景山11用MFC制作一个服务器对话框控件的控制用UpdateData来完成控件和关联值成员变量之间的数据交换——对抽象变量的操作落实到实际控件上UpDateData(FALSE)从变量到控件--显示UpDateData(TRUE)从控件到变量--获得事件的驱动触发UpDateData动作使用“测试”按钮的点击事件处理。段景山12用MFC制作一个具有通信功能的对话框任务描述界面功能设计数据结构设计程序主流程设计消息定制消息处理(程序段)检查流程是否符合任务要求调试段景山13用MFC制作一个具有通信功能的对话框任务描述利用MFC的控件实现简单的通信过程要求:面向连接服务器:同时为多条连接服务,接收数据,给出应答可以设置服务器工作的端口可以启动和停止服务可以显示用户数据,并返回应答可以同时为多个客户机提供服务面向连接的客户机:与服务器建立连接,发送数据,显示应答可以设置服务器工作的端口可以启动与一个服务器连接,以后关闭连接后,可以再次启动与另一个服务器的连接可以输入数据,传输给服务器显示本地端口和服务器应答的数据段景山14用MFC制作一个具有通信功能的对话框无连接程序:可根据用户要求与不同的远端发送数据,并显示远端送来的数据。可以设置本地端口可以设置远方端口,输入数据传递到对方显示远方端口和送来的数据段景山15用MFC制作一个服务器对话框面向连接的服务器界面功能设计可以设置服务器工作的端口可以启动和停止服务可以显示用户数据,并返回应答可以同时为多个客户机提供服务StaticTextEditBoxButton服务端口号接收数据窗口启动服务停止服务应答数据段景山16用MFC制作一个服务器对话框主流程设计用户需要先填写端口号,和应答数据然后启动服务接收到的客户数据显示在接收数据框内用户可以停止服务,服务器将不接受任何数据和连接用户可以更改端口号或应答数据,再次启动服务错误处理设计如用户如果不填端口号,就启动服务用户不停止服务就再次启动服务段景山17用MFC制作一个服务器对话框数据结构设计关键的变量:主套接字:可设计为全局变量可作为对话框类的一个成员变量,让所有与对话框相关的函数(即所有对话框类的成员函数)使用--在classview中添加从套接字的管理队列本次任务可以依靠windows系统帮我们管理众多从套接字,故不作设计缓冲区接收缓冲区发送缓冲区因本次任务并没有对数据有特别的处理,缓冲区可以不必进行专门的设计段景山18用MFC制作一个服务器对话框消息定制改变各控件的IDIDC_PORTIDC_RECVIDC_ACKID_STARTID_STOP段景山19用MFC制作一个服务器对话框classWizard/membervariables段景山20用MFC制作一个服务器对话框设计消息处理功能外部事件ID_START:考虑到服务器可以停止服务并重新设置端口号,所以在start里安排主套接字的初始化和绑定启动主套接字listen设置主套接字的WSAAsyncSelect()事件:FD_ACCEPTID_STOP关闭主套接字段景山21用MFC制作一个服务器对话框设计消息处理功能套接字事件FD_ACCEPT调用accept接受新连接设置新套接字的select事件为,FD_READ|FD_CLOSEFD_READ调用recv接受数据显示数据到数据接收框发送应答信息给客户FD_CLOSE关闭套接字注意:FD_WRITE事件,需要将上一次未发送成功的数据再次发送。对于简单、数据量小的应用可不必考虑段景山22用MFC制作一个服务器对话框添加消息处理函数界面事件可使用消息映射方式可在资源编辑器内直接双击对象,添加处理函数可在右键中选择Event,选择事件和添加处理函数可在classwizard中添加事件和处理函数OnStartOnStop段景山23用MFC制作一个服务器对话框套接字事件可用WndProc,(传统方式)打开对话框的classwizard在message框中选择WindowProc,单击AddFunction,添加到类里分别按照消息处理功能设计的要求完成这些函数段景山24段景山25用MFC制作一个服务器对话框调试启动服务器,启动一个客户,是否可以连接服务器是否可以接收客户数据,是否可以显示客户机是否可以收到服务器的应答关闭客户机,服务器是否关闭套接字再次启动客户机,服务器是否可以接受连接,并完成以上过程停止服务器,客户机是否能知道并关闭套接字再次启动服务器,客户机能否重新连接服务器启动后,能否为多个客户同时提供服务段景山26用MFC制作一个客户机对话框面向连接客户机界面功能设计可以设置服务器工作的端口可以启动与一个服务器连接,以后关闭连接后,可以再次启动与另一个服务器的连接可以输入数据,传输给服务器显示本地端口和服务器应答的数据服务器端口连接服务器断开连接发送的数据发送数据接收的应答服务器地址段景山27用MFC制作一个客户机对话框主流程设计用户需要先填写端口号然后启动和服务连接要发送的数据可以填在发送数据框内点击发送按钮,发送数据给服务器断开连接后,用户可以更改端口号,再次启动服务错误处理设计用户如果在未连接服务器时,就发送数据用户如果在为断开连接时,再次点击连接按钮段景山28用MFC制作一个客户机对话框数据结构设计关键的变量:连接套接字:可设计为全局变量可作为对话框类的一个成员变量,让所有与对话框相关的函数(即所有对话框类的成员函数)使用。缓冲区接收缓冲区发送缓冲区因本次任务并没有对数据有特别的处理,缓冲区可以不必进行专门的设计段景山29用MFC制作一个客户机对话框消息定制IDC_PORTm_portIDC_SENDATAm_sendataIDC_SENDIDC_ACKm_ackIDC_CONNECTIDC_DISCIDC_IPADDRm_ipaddr段景山30用MFC制作一个客户机对话框设计消息处理功能外部事件IDC_CONNECT:考虑到客户机可以连接并重新设置端口号后再连接,所以在connect里安排套接字的初始化和绑定设置套接字的WSAAsyncSelect()事件,FD_CONNECTIDC_DISC关闭套接字IDC_SEND从发送数据窗(IDC_SENDATA)获得数据send()发送数据给服务器段景山31用MFC制作一个客户机对话框设计消息处理功能套接字事件FD_CONNECT设置套接字的select事件为,FD_WRITEconnect()连接服务器FD_WRITE连接已建立,可以发送数据了。这时可以通过界面给用户一个提示。FD_READ调用recv接受数据显示数据到服务器应答框FD_CLOSE关闭套接字段景山32用MFC制作一个客户机对话框添加消息处理函数用消息映射添加外部事件处理函数OnConnectOnDiscOnSend用WindowProc()添加处理套接字消息函数段景山33用MFC制作一个具有通信功能的对话框调试客户机能否与服务器建立连接能否送数据给服务器能否接收到服务器的应答能否断开后与其它服务器建立连接段景山34新建MFC工程选择DialogBased段景山35新建MFC工程选择windowssocket库段景山36IP地址控件的使用方法关联成员变量类型CIPAddressCtrl从控件中读取IP地址UpdateData(TRUE);m_ipaddr.GetAddress(server.sin_addr.S_un.S_un_b.s_b1,server.sin_addr.S_un.S_un_b.s_b2,server.sin_addr.S_un.S_un_b.s_b3,server.sin_addr.S_un.S_un_b.s_b4);
本文标题:网络软件设计9——MFC
链接地址:https://www.777doc.com/doc-4800732 .html