基于CAsyncSocket类网络通信程序设计报告_第1页
基于CAsyncSocket类网络通信程序设计报告_第2页
基于CAsyncSocket类网络通信程序设计报告_第3页
基于CAsyncSocket类网络通信程序设计报告_第4页
基于CAsyncSocket类网络通信程序设计报告_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

太湖学院太湖学院 软软件件技技术术 课课程程设设计计 题目 题目 基于基于 CAsyncSocket 类网络通信程序设计类网络通信程序设计 信机信机系系通信通信专业专业 学号 学号 学生姓名 学生姓名 班级 班级 成绩 成绩 2014 年年 1 月月 一 一 课程设计的目的课程设计的目的 一 掌握 MFC 的 CSocket 类 CAsyncSocket 类的用法 二 掌握使用 CAsyncSocket 类进行网络程序设计的工作流程 三 能运用 CAsyncSocket 类开发一个简单的网络聊天程序 二 二 课程设计的内容课程设计的内容 一 一 服务器的开发服务器的开发 1 1 工程的创建工程的创建 在 VC6 0 的环境中新建一个名为 ChatSever 的基于对话框的工程 并在创建过程的第 2 步 中选中 Socket 选项 保存到 D 盘 在生成的工程中设置通信的端口号 本例设为 5678 设置方法是在 CChatSeverDlg h 头文 件的开始处定义一个宏 如下所示 define iPort 5678 1 2 界面的设计界面的设计 1 3 各控件的属性设置各控件的属性设置 控件设置属性 如表 1 所示 控件类型IDCaption说明 按钮IDCANCEL取消退出程序 按钮IDC BTN SER OPEN打开服务器打开服务器并使之监听 按钮IDC BTN SER CLOSE关闭服务器将服务器关闭 按钮IDC BTN DISCONNECT断开连接和客户端断开连接 按钮IDC BTN MSG SEND发送 将编辑框中的文本发送 到对方 列表框IDC LIST MSG显示双方的对话记录 文本编辑框IDC EDIT MSG输入需要发送的文本 表 1 1 4 给控件映射变量给控件映射变量 给控件映射变量 具体如表 2 所示 控件 ID变量类属 Category 变量类型 Variable type 变量名 Member Variable name IDC LIST MSGControlCListBoxm list msg IDC EDIT MSGValueCStringm edit msg 表 2 具体的映射过程如下 1 右键单击需映射变量的控件 在弹出的菜单中选中建立类向导选项 2 在弹出的对话框的第二个标签页 Member Variables 中选中需映射变量的控 件的 ID 然后点击右侧的 Add Variable 按钮 3 在弹出的变量设置对话框中 选择变量类属 变量类型 输入变量名称 然后 点击 OK 1 5 添加派生类添加派生类 由于我们的程序在通信过程中需要使用 MFC CAsyncSocket 类进行通信 因此需要 在工程中添加一个 CAsyncSocket 类的派生类 为了以后编程方便 我们将派生类的说明和 实现分别放在 ChatSeverDlg h 和 ChatSeverDlg cpp 文件中 添加过程如下 1 点击插入下的类菜单 2 在弹出的对话框中设置 点击图中的 Change 按钮来设置 h 头文件和 cpp 实现文 件 3 在弹出的 Change files 对话框中点击 Browse 按钮 4 在弹出的 Browse files 对话框中选中 ChatSeverDlg h 文件 5 重复 3 4 两步 将 cpp 实现文件设置为 ChatSeverDlg cpp 文件 1 6 给给 CMySocket 类添加重载虚拟函数类添加重载虚拟函数 我们给 CMySocket 类添加如下几个重载虚拟函数 OnAccept OnConnect OnClose OnSend OnReceive 添加过程如下 1 在类视图中右键单击 CMySocket 类 在弹出菜单中选择 Add Virtual Function 项 2 在弹出对话框中选中 OnAccept 并点击右侧的 Add and Edit 按钮 3 重复 1 2 两步 添加 OnConnect OnClose OnSend OnReceive 函数 1 7 给给 CChatSeverDlg 类添加成员变量和自定义成员函数类添加成员变量和自定义成员函数 一 添加变量 我们在 CChatSeverDlg 类中添加变量 m listensocket m worksocket 变量类型均为 CMySocket 访问类型为 public m listensocket 变量 监听套接字 用于监听客户端的连 接请求 m worksocket 变量 通信套接字 用于和客户端进行数据接收和发送 添加过程 如下 1 在类视图中右键单击 CChatSeverDlg 类 在弹出菜单中点击 Add Member Variable 2 在弹出的 Add Member Variable 对话框的 Variable Type 编辑框中输入 CMySocket 在 Variable Name 框中输入 m listensocket Access 设置为 public 3 重复 1 2 两步 添加 m worksocket 变量 二 添加自定义成员函数 为以后的与客户端的通信 我们给 CChatSeverDlg 对话框类添加如下函数 accept recv send connect close 函数类型均为 void 添加过程如下 4 在类视图中右键单击 CChatSeverDlg 类 在弹出菜单中点击 Add Member Function 5 在弹出的 Add Member Function 对话框的 Function Type 编辑框中输入 void 在 Function Name 框中输入 accept Access 设置为 public 6 重复 1 2 两步 添加 recv send connect close 函数 以上函数中 accept 函数用于服务器接受客户端的连接请求 connect 用于客户端向 服务器提出连接请求 send 用于向对方发送数据 recv 用于接收对方发来的数据 close 用于关闭通信套接字终止连接 1 8 添加代码添加代码 二 二 客户端的开发客户端的开发 2 1 工程的创建工程的创建 创建一个名为 ChatClient 的基于对话框的 MFC 应用程序工程 创建过程同 1 1 并定 义通信端口 iPort 为 5678 同 1 1 2 2 界面的设计界面的设计 2 3 设置控件的属性设置控件的属性 给各控件设置属性 如表 3 所示 表 3 控件类型IDCaption说明 按钮IDCANCEL关闭退出程序 按钮IDC BTN CONNECT连接打开服务器并使之监听 按钮IDC BTN DISCONNECT断开和客户端断开连接 按钮IDC BTN MSG SEND发送 将编辑框中的文本发送 到对方 列表框IDC LIST MSG显示双方的对话记录 静态文本服务器 文本编辑框IDC EDIT SEVER设置服务器地址 文本编辑框IDC EDIT MSG输入需要发送的文本 2 4 给控件映射变量给控件映射变量 给控件映射变量 具体如表 4 所示 表 4 控件 ID变量类属 Category 变量类型 Variable type 变量名 Member Variable name IDC LIST MSGControlCListBoxm list msg IDC EDIT SEVERValueCStringm edit sever IDC EDIT MSGValueCStringm edit msg 2 5 添加派生类 同添加派生类 同 1 5 2 6 给给 CMySocket 类添加重载虚拟函数 同类添加重载虚拟函数 同 1 6 2 7 给给 CChatClientDlg 类添加成员变量和自定义成员函数类添加成员变量和自定义成员函数 一 添加变量 只添加变量 m worksocket 类型和添加过程均同 1 7 二 添加自定义成员函数 同 1 7 2 8 添加代码添加代码 三 三 程序流程图程序流程图 创建Socket连接 客户端登陆 是否登陆成功 Yes No 登陆 发送IP地址 向客户端写数据 读取客户端数据向服务器写数据 读取服务器数据 断开连接断开连接 开始启动 结束结束 数据 提问 数据 回复 客户端 开始启动 创建Socket连接 绑定名称端口 服务器 四 四 界面设计与说明界面设计与说明 服务器界面 服务器界面 取消 退出程序 打开服务器 打开服务器并使之监听 关闭服务器 将服务器关闭 断开连接 和客户端断开连接 发送 将编辑框中的文本发送到对方 列表框 显示双方的对话记录 文本编辑框 输入需要发送的文本 客户端界面 客户端界面 关闭 退出程序 连接 打开服务器并使之监听 断开 和客户端断开连接 发送 将编辑框中的文本发送到对方 列表框 显示双方的对话记录 文本编辑框 设置服务器地址 文本编辑框 输入需要发送的文本 在程序调试运行的时候 在服务器界面点击打开服务器按钮 并解除阻止 然后在客在程序调试运行的时候 在服务器界面点击打开服务器按钮 并解除阻止 然后在客 户端界面的服务器地址文本框中输入服务器界面所在的服务器地址 点击连接按钮连接 户端界面的服务器地址文本框中输入服务器界面所在的服务器地址 点击连接按钮连接 当显示连接成功时就可以开始对话 当显示连接成功时就可以开始对话 五 五 重要功能代码及说明重要功能代码及说明 给给 CChatSeverDlg 类成员函数添加代码类成员函数添加代码 1 accept void CChatSeverDlg accept struct sockaddr in cli 定义 sockaddr in 结构体类型的 cli int len sizeof cli 定义整型量 len 并给初值 CString strIpAddr 定义字符串 strIpAddr m listensocket Accept m worksocket SOCKADDR 监听套接字接受请 求 strIpAddr inet ntoa cli sin addr 将一个 IP 转换成一个互联网标准点分格 式的字符串 strIpAddr 新的连接 strIpAddr 在 strIpAddr 之前加上 新的连接 AfxMessageBox strIpAddr 在弹出框中显示 新的连接 连接的 IP 地址 GetDlgItem IDC BTN SER CLOSE EnableWindow false 调整各个按钮 明暗 false 为暗 true 为亮 GetDlgItem IDC BTN MSG SEND EnableWindow true GetDlgItem IDC BTN DISCONNECT EnableWindow true 2 close void CChatSeverDlg close m worksocket Close 通信套接字关闭 AfxMessageBox 连接已经断开 弹出框显示 连接已经断开 GetDlgItem IDC BTN SER CLOSE EnableWindow true 调整各个按钮明暗 GetDlgItem IDC BTN MSG SEND EnableWindow FALSE GetDlgItem IDC BTN DISCONNECT EnableWindow FALSE 3 send void CChatSeverDlg send UpdateData true 窗口函数 用于刷新数据 if m edit msg IsEmpty 如果编辑框中不为空 CString msg 定义字符串 msg CString from 自己 定义字符串 from 给值 自己 msg from m edit msg msg 的内容为 自己 编辑框中的内容 int len m edit msg GetLength 将编辑框中的文本长度赋值给整型变量 len m worksocket Send m edit msg len 发送内容 m list msg InsertString 0 msg 将 msg 的内容插入到列表框中 m edit msg Empty 编辑框中内容清空 UpdateData false 刷新数据的函数参数置 false 4 receive void CChatSeverDlg recv char buf 1024 临时申请一个 1024 大的空间 CString msg 定义字符串 msg CString from 对方 定义字符串 from 给值 对方 int len m worksocket Receive buf 1024 通信套接字接收数据放于 1021 的空 间内 buf len 0 在数组最后加上结束符 msg buf msg from msg msg 给值为 对方和接收的数据 m list msg InsertString 0 msg 在列表框中插入 msg 的内容 在在 CChatSeverDlg 类的类的 OnInitDialog 函数中添加代码函数中添加代码 GetDlgItem IDC BTN SER OPEN EnableWindow true GetDlgItem IDC BTN SER CLOSE EnableWindow FALSE GetDlgItem IDC BTN DISCONNECT EnableWindow FALSE GetDlgItem IDC BTN MSG SEND EnableWindow FALSE GetDlgItem IDCANCEL EnableWindow true 初始化 将打开服务器按钮 取消按钮变亮 将关闭服务器按钮 断开连接按钮 发送按钮变暗 给给 CChatSeverDlg 类的各个按钮的消息处理函数添加代码类的各个按钮的消息处理函数添加代码 1 打开服务器按钮打开服务器按钮 void CChatSeverDlg OnBtnSerOpen TODO Add your control notification handler code here m listensocket Create iPort 监听套接字创建一个定义端口 m listensocket Listen 监听套接字监听 GetDlgItem IDC BTN SER OPEN EnableWindow false 调整各个按钮明暗 GetDlgItem IDC BTN SER CLOSE EnableWindow true GetDlgItem IDCANCEL EnableWindow FALSE 2 关关闭服务器按钮闭服务器按钮 void CChatSeverDlg OnBtnSerClose TODO Add your control notification handler code here m listensocket Close 监听套接字关闭 GetDlgItem IDC BTN SER OPEN EnableWindow true 调整各个按钮明暗 GetDlgItem IDC BTN SER CLOSE EnableWindow FALSE GetDlgItem IDC BTN MSG SEND EnableWindow FALSE GetDlgItem IDCANCEL EnableWindow true GetDlgItem IDC BTN DISCONNECT EnableWindow FALSE 3 断开连接按钮断开连接按钮 void CChatSeverDlg OnBtnDisconnect TODO Add your control notification handler code here close 调用 close 函数 4 发送按钮 发送按钮 void CChatSeverDlg OnBtnMsgSend TODO Add your control notification handler code here send 调用 send 函数 给给 CChatClientDlg 类成员函数添加代码类成员函数添加代码 1 connect void CChatClientDlg connect AfxMessageBox 连接成功 弹出框中显示 连接成功 GetDlgItem IDC BTN MSG SEND EnableWindow true 调整各个按钮明暗 GetDlgItem IDC BTN DISCONNECT EnableWindow true GetDlgItem IDC BTN CONNECT EnableWindow false GetDlgItem IDCANCEL EnableWindow false 2 close void CChatClientDlg close m worksocket Close 通信套接字关闭 AfxMessageBox 连接已经断开 弹出框中显示 连接已经断开 GetDlgItem IDC BTN CONNECT EnableWindow true 调整各个按钮明暗 GetDlgItem IDC BTN DISCONNECT EnableWindow false GetDlgItem IDC BTN MSG SEND EnableWindow false GetDlgItem IDCANCEL EnableWindow true 3 receive send 同给 CChatSeverDlg 类成员函数添加代码 在在 CChatClientDlg 类的类的 OnInitDialog 函数中添加代码函数中添加代码 同给 CChatSeverDlg 类成员函数添加代码 给给 CChatSeverDlg 类的各个按钮的消息处理函数添加代码类的各个按钮的消息处理函数添加代码 1 连接按钮连接按钮 void CChatClientDlg OnBtnConnect TODO Add your control notification handler code here UpdateData if m edit sever IsEmpty 如果服务器地址编辑框不为空 m worksocket Create 创建通信套接字 m worksocket Connect m edit sever iPort 通信套接字与自定义的服务 器端口连接 GetDlgItem IDC BTN CONNECT EnableWindow false 连接按钮变暗 m edit sever Empty 服务器地址编辑框中的内容清空 2 断开和发送断开和发送 void CChatClientDlg OnBtnDisconnect TODO Add your control notification handler code here close 调用 close 函数 void CChatClientDlg OnBtnMsgSend TODO Add your control notification handler code here send 调用 send 函数 六 六 心得与体会心得与体会 通过本次课程设计 我更深入的了解了通过本次课程设计 我更深入的了解了 Visual c 6 0 net 系统 初步掌系统 初步掌 握了握了 MFC 的的 CSocket 类 类 CAsyncSocket 类的用法 了解并掌握使用类的用法 了解并掌握使用 CAsyncSocket 类进行网络程序设计的工作流程 并在老师的指导下能运用类进行网络程序设计的工作流程 并在老师的指导下能运用 CAsyncSocket 类开发一个简单的网络聊天程序 类开发一个简单的网络聊天程序 早

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论