1、12015/2016 学年 第 2 学期软件设计实验报告模块名称 VC+ 专业 广播电视工程 学生班级 B130114 学生学号 B13011413 学生姓名 陈超 指导教师 余雪勇 2设计题目1.熟悉 VC+6.0 的使用环境2.获取计算机的名称和 IP 地址3.基本 C/S 模式的通信实验4.典型网络应用设计5.综合网络应用设计任务要求1 熟悉 VC+6.0 的使用环境:掌握最基本的基于控制台、对话框、单文档及多文档界面的项目创建方法;掌握项目中的文件构成及作用,学会在程序文件中增加功能代码的方法;掌握程序的生成和调试方法。2.获取计算机的名称和 IP 地址实验:掌握在程序中获取网络参数的
2、方法:获取计算机的名称和 IP 地址;获取计算机的子网掩码;获取计算机的 DNS 设置;获取计算机的网卡地址; 3.基本 C/S 模式的通信实验编写程序实现下述功能:一个UDPClient/Server模式的通信程序;一个TCP Client/Server模式的通信程序基本要求:能输入计算机的 IP 地址和端口号,能输入、发送文本信息和显示接受的文本信息。4.典型网络应用程序设计4.1聊天室设计:完成一个文本聊天室程序的设计。4.2简单的浏览器的实现:设计一个简单的浏览器5.综合网络应用设计:房产报修网络化管理实验设备及软件硬件:PC 机一台;软件:VC+6.0;其他通用软件工具同组人员学号及
3、姓名无参考文献1.朱桂英、张元亮 Visual C+网络编程开发与实战 清华大学出版社2.姚领田等 MFC 窗口程序设计 中国水利水电出版社3.汪晓平、钟军 Visual C+网络通信协议分析与应用实现 人民邮电出版社4.曹衍龙 Visual C+网络通信编程实用案例精选(第二版) 人民邮电出版社5.雷斌、杨建华、黄超、何斌 Visual C+ 6.0 网络编程技术人民邮电出版社6.美David J.Kruglinski 译:希望图书创作室 MICROSOFT VISUAL C+ 6.0 技术内幕 北京希望电子出版社3一、获取计算机 IP 地址等网络参数1、实验目的程序能够自动获取计算机的名称
4、、IP 地址、子网掩码、DNS 设置、网卡地址。2、实验内容及过程1. 启动 Visual C+6.0,在此 IDE 环境中单击 File/New 菜单项,打开 New 对话框,然后单击 Projects 选项卡,选择“MFC AppWizardexe”一项。在对话框右上角的 ProjectsName 中填新工程的名字,然后选择适当的目录位置放置此新工程;新建一个 MFC Appwizard(exe)工程,命名为 B13011413,选择 Dialog based框架,一定要包含 Windows Sockets。2. 在工作区中选择“ResourceView”选项卡,选择 Dialog,双击菜
5、单控件的名字(IDD_B13011413_DIALOG),右边出现程序视图的原始界面,在 Dialog 里创建应用程序框架,删除对话框中的静态文本框,然后添加控件,选择静态文本框,用来显示计算机名、IP 地址等文字,然后对应添加编辑框,修改其属性,将其 ID 分别修改为 IDC_EDIT1IDC_EDIT7,然后进入 ClassWizard,建立类向导,选择 Member Variables 选项卡,为其添加成员变量 m_tName,m_type,m_cardname,m_sDsMask,m_sDns,m_pMacAddr, m_sIPAddress;如下图 1.1。图 1.1 添加成员变量3
6、.添加按钮用于查询,修改其 ID 为 IDC_BUTTON1,进 MFC classWizard,选择 Member Maps 选项卡,再在 Object Ids 列表框中选择 IDC_BUTTON1,选择Messages 列表框中的 BN_CLICKED,点击“Add Function”按钮,增加一个函数,使用系统默认名“IDC_BUTTON1” ,单击“OK” ;如下图 1.2。44.编写程序代码:OnButton1()中调用 StartUp()函数来添加 WINSOCK 类库,调用函数 GetLocalHostName 获取主机名,函数 GetIPAddress 获取 IP 地址,函数G
7、etInfo 获取网卡信息,函数 ParseData 获取适配器信息。点击查询按钮,所获信息均显示在编辑框内。5.在工程-设置- 连接-对象/库模块中加入对 IPHLPAPI.LIB 库文件的支持。图 1.2 添加成员函数3、实验结果1.点击查询按钮,获取本机网络参数显示如下图 1.3图 1.3 获取计算机的网络配置信息4、实验体会5本实验是在对前一阶段熟悉 VC6.0 使用环境及对 MFC 的全面理解的基础上完成的,开始时由于不理解 MFC 编程,以为只需要编写代码,所以出了很多错误,比如在新建工程时没有选取 Windows Sockets 导致程序无法编译,还有变量定义的类型一开始不熟悉总
8、是忽略而选默认值,还有必须链接到IPHLPAPI.LIB 库文件不然会报错等等细节,这些基本注意点应牢牢掌握,才能更熟练地完成接下来的任务。二、基于 UDP 模式的通信程序1、实验目的通过 Sockets 编程,设计一个 UDP 的 C/S 通信程序,实现点对点的通信,能编辑文本消息以及实现该消息的传送。2、实现方法:UDP 的 Server 和 Client 程序相同,采用相同的架构,Server 服务端对本地终结点进行监听,客户端同样对相应终结点监听,直接向该终结点发送数据,便可进行通信,程序架构分为两部分,一部分是对本地终结点的绑定和监听,另一部分是进行数据的通信。通信过程中,第一步初始
9、化 Winsock;第二步建立一个数据报类型的 UDP 套接字;第三步使用 sendto 函数进行通信;第四步关闭 socket;程序流程图如下图 2.1:图 2.1 UDP 通信程序流程图3、实验过程:1按之前详述步骤建立一个新工程,取名为 B13011413UDP。2在resourceview 里的Dialog中创建应用程序框架,修改相应编辑或按钮框的Object IDs,在MFC ClassWizard中建立类向导:添加变量m_disp,m_sip,m_sport,m6_dip,m_dport,添加成员函数OnButton1,OnRadio1,OnRadio2。3.在工作区中选择 Fil
10、eView 选项卡,手动添加 chatsock.cpp 和 mysocket.cpp 和相对应的头文件,并在程序代码中引用这两个头文件。4.编写源程序代码4、实验结果运行时需要打开两个运行窗口并分别设置目的端口和源端口的端口号分别对应,选中 UDP,并在编辑框里输入文本信息,点击 “发送”按钮,文本信息在另一个窗口中显示时,实现通信。1.UDP 服务端建立如下图 2.2图 2.2 UDP 服务端建立2.UDP 客户端连接如下图 2.37图 2.3 UDP 客户端连接3. UDP 客户端与服务端连接成功并进行聊天如下图 2.4图 2.4 UDP 客户端与服务端连接成功并进行聊天5、实验体会基于
11、C/S 模式的 UDP 模式的通信程序设计,是第一次尝试基于 socket 套接字进行数据传输,因为对于 socket 流式传输原理的理解不够深刻,在尝试编写过程中出现了大量 error 后,参考了许多相关 mysocket 类的实现与应用代码,也逐步认识到套接字的使用方法;另外,在搭建 Dialog 框架的使用上,相对于上一个实验,诸如可以修改编辑框文字的滚动格式等有了更多的了解。此次设计的 UDP 通信一个很大的局限在于未设置关闭 UDP 连接按钮及相应功能,需要进一步深刻理解夯实原理,探索实现。三、基于 TCP 模式的通信程序1、实验目的使用 Sockets 编程,实现基于 TCP 的
12、C/S 模拟通信。2、实现方法:对Socket服务端采用用多线程框架,对每一个客户端的连接分配一个子线程,程序采用默认端口,一旦运行便对端口开始监听,程序功能分为三部分,包括SocketServer 的配置以及监听,数据的接收和数据的发送。程序界面有三个按钮分别为发送、清空、关闭,消息函数分别为btnClientSend_Click、btnClear_Click、btnExit_Click 。对Socket 客户端,通过设置菜单设置连接的服务器IP,端口采用默认端口,简单实现对服务器的连接和数据收发。程序流程图如下图3.1:8图3.1 TCP通信程序流程图4、实验过程1.建立两个新工程,分别取
13、名为 B13011413TCPC 和 B13011413TCPS。2.在工作区中选择“ResourceView ”选项卡,选择 Dialog,双击菜单控件的名字(IDD_B13011413TCPS_DIALOG 和 IDD_B13011413TCPC_DIALOG),右边出现程序视图的原始界面,使用控件添加 Static,Button,Edict,Radio 等控件,对每一个控件右键可编辑属性修改 ID 和标题。3.在工具栏点击查看-建立类向导,进入 Massage Map 选项卡,Class Name 选择B13011413TCPSDlg(客户端选择 B13011413TCPCDlg) ,为
14、控件添加事件处理函数。进入 Member Varibles 选项卡,为控件添加变量名。4.在工作区中选择 FileView 选项卡,在 B13011413TCPCFiles 中手动添加chatsock.cpp,chatsock.h,mysocket.cpp 和 mysocket.h,在 B13011413TCPSFiles中添加 clisock.cpp,lstsocket.cpp,mysocket.cpp 和对应的头文件,并在程序代码中引用这些文件。5.编写相应函数代码。4、实验结果运行时需要打开两个运行窗口并分别设置目的端口和源端口的端口号,先点击 TCP 建立服务器,再点击 TCPclie
15、nt,并在编辑框里输入文本信息,点击“发送”按钮,文本信息在另一个窗口中显示时,实现通信。91.TCP 服务器建立如下图 3.2图 3.2 TCP 服务器建立2. TCP 客户端与服务端连接成功如下图 3.3图 3.3 TCP 客户端与服务端连接成功3. TCP 客户端与服务端进行聊天如下图 3.410图 3.4 TCP 客户端与服务端进行聊天5、实验体会经过 TCP 和 UDP 模式的通信程序设计,对 TCP 与 UDP 的通信原理与区别有了较为深刻的认识。相对于 UDP 通信,TCP 是一种面向连接的、可靠的、基于字节流的传输层通信协议,其必须保证传输的数据无误,因此在 UDP 基本架构上
16、要用一个校验和函数检验数据是否有错误,在接收和发送时都要计算校验和,UDP 没有可靠、有次序、不重复的保证。查找了一些参考资料及相关代码发现,一般情况下 TCP Socket 的数据发送和接收是调用 send() 及 recv() 这两个函数来达成,而 UDP Socket 则是用 sendto() 及 recvfrom() 这两个函数,这两个函数调用成功发挥发送或接收的资料的长度,否则返回SOCKET_ERROR,所以 TCP 的两端每次收发数据前必须建立连接,协议本身也保证可靠有序,而 UDP 任何一方建立一个 socket 后就可以用这两个函数收发数据,但并不关心对方是否存在并接受。对课
17、本理论内容是一次极大地实践与学习。四、基于 Socket 的文本聊天室设计1、实验目的利用 WinSocket 实现一个网络聊天室。需要一个聊天服务器,它可以和很多客户端进行通信,从而把来自不同的客户的聊天信息转交到所有其他的客户端。这样就形成了一个采用 Client/Server 结构的并可以多人同时在线的聊天室。2、实现方法在 Internet 上的聊天室程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。因此,程序要在 TCP/IP 环境下,实现服务器端和客户端两部分程序。1)服务器端工作流程:服务器端通过 socket()系统调用创建一个 Socket 数组后(即设定了接受连接客户的最大数目),与指定的本地端口绑定 bind(),就可以在端口进行侦听 listen()。如果有客户端连接请求,则在数组中选择一个空Socket,将客户端地址赋给这个 Socket。然后登录成功的客户就可以在服务器上聊天了。2)客户端工作流程:客户端程序相对简单,只需要建立一个 Socket 与服务器端连接,成功后通过这个 Socket 来发送和接收数据就可以了。流程图如下图 4.1