网络编程实验报告-实验3 基于windows的MFC windows编程 下载本文

实验报告

学院(系)名称:计算机与通信工程学院

姓名 班级 课程名称 学号 实验名称 专业 信息安全 实验3 基于windows的MFC windows编程 网络编程 课程代码 0662146 实验时间 2016- 12 - 5 实验地点 7-219 批改意见 成绩 教师签字: 1. 实验目的 VC++对原来的WindowsSockets库函数进行了一系列封装,继而产生CAsynSocket、CSocket、CSocketFile等类,它们封装着有关Socket的各种功能。利用VC6.0中MFC AppWizard和MFC ClassWizard功能将很容易实现网络聊天功能 2. 实验环境 搭载 Windows 7 操作系统的PC机 VC 6.0 编译器 3. 实验要求 编写基于windows的MFC windows的可进行socket通信的程序 4. 实验过程记录(源程序、测试用例、测试结果及心得体会等) 1.建立基于对话框的MFC 工程MySock 注意:①基于对话框;②支持window socket。 1. 添加控件,并设置控件属性 控件类型 Group Box Radio Button ID IDC_STATIC IDC_RCLIENT 第1页 共8页

Caption socket类型 客户端

RadioButton Static text Edit box Static text Edit box Button Button Static box Edit box Static box List box Static box List box Button IDC_RSERVER IDC_SNAME IDC_ESERVERNAME IDC_SPORT IDC_EPORT IDC_BCONNECT IDC_BCLOSE IDC_SMSG IDC_EMSG IDC_SSEND IDC_LSEND IDC_SRECV IDC_LRECV IDC_BSEND 服务器端 服务器名 端口号 连接 关闭 消息 发送 接收 发送 3.为控件添加对应的成员变量和映射消息响应函数 双击“发送”按钮,添加OnBsend 函数;双击“关闭”按钮,添加OnBclose 函数;复用“连 接”按钮,当选择客户端按钮时显示“连接”;当选择服务端时显示“监听”。为两个单选按 钮添加一个消息函数, 根据当前选择的按钮修改命令的正文。具体做法是,双击 IDC_RCLIENT 控件,添加函数OnRType 函数,同时双击IDC_RSERVER 控件,添加该函 数。 编辑该函数,添加如下代码: //in MySockDlg.cpp void CMySockDlg::OnRType() { // TODO: Add your control notification handler code here UpdateData(TRUE); //使控件与变量同步 if(m_iType==0) //m_iType=0 即client 端 m_ctlConnect.SetWindowText(\连接\为控件“连接”按钮的映射变 量 else m_ctlConnect.SetWindowText(\监听\} 第2页 共8页

运行程序,结果如下图所示: 选中“客户端”显示“连接”;选中“服务器端”显示“监听”: 4.添加CAsyncSocket 类的继承类MySocket 为了使应用程序能够捕捉和相应socket 事件,可以从AsyncSocket 创建自己的派生类。该类 需要有自己版本的事件函数,也需要一种把此事件传到对话框的方法。为把每个事件传给对 话框类、添加一个指向父对话框的指针作为socket 类的成员变量。对每个socket 事件使用 此指针调用事件函数。具体做法, 如图所示: 创建socket 类后,为该类添加一个私有成员变量m_pWnd 作为指向父对话框的指针;然后 必须在该类中,添加一个成员函数SetParent 以设置该指针,该函数在MySocket.cpp 文件中的 实现代码为: void CMySocket::SetParent(CDialog* pWnd) { m_pWnd=pWnd;//设置成员指针变量 } 最后,MySocket 类,还必须添加事件函数,用于调用对话框类中名字相同的成员函数。为 添加OnAccept 事件函数,可以ClassWizard 窗口中,单击右键|add virtual function… 注意:同时添加#include \ 5.初始化CMySocket 类的成员函数 添加CMySocket 变量后,添加所有变量的初始化代码。默认设置为:应用程序类型设置为 客户端程序,服务器名为loopback,端口为4000,在两个CMySocket 对象中设置父对话框 的指针,指向对话框类对象。所有这些初始化,都在OnInitDialog 函数中完成。 注意:计算机名loopback 是TCP/IP 网络协议的一个特殊名字,表示你正在这台计算机上工 作,这个内部计算机名网址为127.0.0.1。需要与另一个程序连接,运行在同一台计算机上的 应用程序都用此名字和网址。 // in MySockDlg.cpp BOOL CMySockDlg::OnInitDialog() { //省略代码(自动生成的) // TODO: Add extra initialization here //初始化控件对应的变量 m_iType = 0; m_strName =\第3页 共8页