VC++聊天室课程设计完整代码及程序.doc_第1页
VC++聊天室课程设计完整代码及程序.doc_第2页
VC++聊天室课程设计完整代码及程序.doc_第3页
VC++聊天室课程设计完整代码及程序.doc_第4页
VC++聊天室课程设计完整代码及程序.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

网络聊天室课程设计 班级 姓名 学号 时间 目录 1 1 需求分析需求分析 2 2 2 2 相关知识相关知识 4 4 2 1 WINSOCK介绍 4 2 2 MFC 类 CASYNCSOCKET和 CSOCKET 5 2 3 利用 CSOCKET进行有连接的通信 6 3 3 详细设计详细设计 8 8 3 1 客户端的实现 8 3 2 服务端的实现 13 4 4 程序运行结果程序运行结果 2020 4 1 服务器端 20 4 2 客户端 20 5 5 参考文献参考文献 22 3 1 需求分析 当前是数字信息时代 网络时代 任何一种编辑工具都不能忽视在网络上的应用 并且随着 Internet 的普及和宽带技术的成熟 越来越多的用户进入网络世界中享用浏 览新闻 查询信息 发送邮件 在线观看电影等服务 享受网络带来的便利和办公的 高效 与此同时一个新型的 Web 应用程序为网民之间提供了一个实时通信的功能和场 所 这就是聊天室 在网络早期就开始盛行 不论是 BBS IRC 都有类似网上聊天室的机制 聊天室为 网友提供了实时性对话的渠道 是网络上极为流行的一项服务 聊天室适用于网上会议或闲聊的一些场合 聊天室为网友提供了较好的交友环境 网友之间相互以文字交谈 在形式上有点类似笔友的性质 却大大节省了书信往返的 时间 这也是网上交友之所以如此热门的原因 聊天室的设计目标 本课题是建立聊天通信模型 设计一个聊天室软件 包括服务器端和客户端 主要 功能为 服务器端功能 1 初始化 socket 创建服务器端 2 维护一个链表 保存所有用户的 IP 地址 端口信息 3 接受用户传送来的聊天信息 然后向链表中的所用用户转发 4 接受用户传送来的连接判断命令 并向用户发出响应命令 客户端功能 客户端界面上的两个文本框 一个用于显示接受的聊天信息 一个用来接受用户输 入的聊天信息 当按下 发送 按钮时将信息发送给服务器 通过本课题的毕业设计 可以比较深入的了解和掌握 WINSOCK 控件基本属性 方法和事件 理解 网络聊天通信的概念 输控制协议 TCP 进行数据交流 初步掌握网络聊天通信程序的设计方法 并能巩固和扩展大学期间的学习内容 进行项目的设计开发训练 更好的适应社会的需求 4 2 相关知识 2 1 Winsock 介绍 Windows Sockets 规范以 U C Berkeley 大学 BSD UNIX 中流行的 Socket 接口为范 例定义了一套 Micosoft Windows 下网络编程接口 它不仅包含了人们所熟悉的 Berkeley Socket 风格的库函数 也包含了一组针对 Windows 的扩展库函数 以使程序 员能充分地利用 Windows 消息驱动机制进行编程 Windows Sockets 规范本意在于提供给应用程序开发者一套简单的 API 并让各家网 络软件供应商共同遵守 此外 在一个特定版本 Windows 的基础上 Windows Sockets 也定义了一个二进制接口 ABI 以此来保证应用 Windows Sockets API 的应用程序能 够在任何网络软件供应商的符合 Windows Sockets 协议的实现上工作 因此这份规范定 义了应用程序开发者能够使用 并且网络软件供应商能够实现的一套库函数调用和相 关语义 2 2 MFC 类类 CAsyncsocket 和和 CSocket 构造一个 CAsyncSocket 对象并使用该对象创建基础 SOCKET 句柄 套接字的创建遵循两阶段构造的 MFC 模式 例如 CAsyncSocket sock sock Create Use the default parameters 对于服务器套接字 必须指定端口 对于客户端套接字 通常接受此参数的默认值 该值允许 Windows Sockets 选择端口 套接字类型 SOCK STREAM 默认值 或 SOCK DGRAM 套接字 地址 如 或 128 56 22 8 该地址为网络上的网际协议 IP 地址 很可能要始终依赖此参数的默认值 如果套接字是客户端 则使用 CAsyncSocket Connect 将此套接字对象连接到服 务器套接字 销毁销毁 CAsyncSocketCAsyncSocket 对象 对象 5 如果在堆栈上创建了套接字对象 当包含函数超出范围时将调用此对象的析构函数 如果使用 new 运算符在堆上创建了套接字对象 则必须负责使用 delete 运算符销毁 此对象 阻塞阻塞 方案 方案 发送和接收计算机之间的字节顺序差异 在 Unicode 和多字节字符集 MBCS 字符串之间转换 2 32 3 利用利用 CSocketCSocket 进行有连接的通信进行有连接的通信 CAsyncSocket 类逐个封装了 WinSock API 为高级网络程序员 提供了更加有力而灵活 的方法 这个类基于程序员了解网络通讯的假设 目的是为了在 MFC 中使用 WinSock 程序员有责任处理诸如阻塞 字节顺序和在 Unicode 与 MBCS 间转换字符的任务 为了 提供更方便的接口以自动处理这些任务 MFC 给出 了 CSocket 类 这个类是由 CAsyncSocket 类继承下来的 它提供了比 CAsyncSocket 更高层的 WinSock API 接口 Csocket 类和 CsocketFile 类可以与 Carchive 类一起合作来管理发送和接收的数据 这使管理数据收发更加便利 CSocket 对象提供阻塞模式 这对于 Carchive 的同步操 作是至关重要的 阻塞函数 如 Receive Send ReceiveFrom SendTo 和 Accept 直到操作完成后才返回控制权 3 1 客户端的实现 1 首先启动 Visual C 6 0 利用 MFC AppWizard EXE 建立一个新的 MFC 工程 工 程名为 tcpclient 在 MFC AppWizard Step1 的时候选择 Dialog based 即基于对话框 在 Step4 时勾选 Windows Sockets 选项 如图 3 11 其他默认值下一步 6 图 3 11 MFC 的设置 2 客户端主要分为三个窗口 第一个是连接窗口 需要输入连接到服务器的相 关设置信息 第二个是聊天信息显示窗口 该窗口显示登录服务器以来发送和接收到 的消息 第三个是消息编辑发送窗口 需要输入你要发送的信息内容并发送 单击连接服务器按钮时的处理网络连接的函数 代码设置如下 void CTcpclientDlg Onconnet TODO Add your control notification handler code here if clconect clconect Close CString ipstr portstr int port GetDlgItemText IDC EDIT1 ipstr GetDlgItemText IDC EDIT2 portstr GetDlgItemText IDC EDIT5 clientname portstr TrimLeft portstr TrimRight port atoi portstr if port 0 cw GetDlgItem IDC EDIT2 cw EnableWindow false cw GetDlgItem IDC connet cw EnableWindow false cw GetDlgItem IDC EDIT5 cw EnableWindow false SetDlgItemText IDC EDIT3 已设名字 clientname r n 连接服务 器成功 CString enterinfo clientname 进入聊天室 int len enterinfo GetLength clconect Send enterinfo len else clconect Close MessageBox 连接失败 请检查 IP 与端口是否与服务器一致 或者服务 器没打开 连接错误 MB ICONERROR 7 else MessageBox 端口或 IP 输入有误 请重新输入 设计步骤 创建字符串 ipstr 保存 IP portstr 保存端口 clientname 用户名 整型 port 端口号 利用 GetDlgItemText 将各个编辑框中的信息赋给相应的变量 监视端口号和 IP 格式并设置相应错误提示 如下图 图 3 13 连接错误提示 图 3 14 端口或 IP 错误提示 创建套接字 clconect 设置成功创建后相关控件为只读 设置建立连接后相应提示 5 接下来就是对话框中的发送 回车 按钮的函数 代码设置如下 void CTcpclientDlg Onsend CString str GetDlgItemText IDC EDIT4 str str clientname str int len str GetLength if clconect Send str len 1 SetDlgItemText IDC EDIT4 定义字符串 str 用于保存输入的消息 调整格式后使用 CSocket 的操作函数 send 将消息发送到服务器 6 要显示客户端接收到来自服务器其他用户的信息 代码设置如下 void CTcpclientDlg onrev 8 CString str str1 char ss 256 for int j 0 jLineScroll ce GetLineCount 1 设计步骤 创建字符串 str str1 字符数组 ss 接受来自服务器套接字的信息数据保存到 ss 中 调整格式后将其打印到消息区 7 当与服务器断开连接时弹出警告 如下图 图 3 15 失去连接提示 代码设置如下 void CTcpclientDlg oncl MessageBox 失去连接或者找不到服务器 CWnd cw GetDlgItem IDC EDIT1 cw EnableWindow true cw GetDlgItem IDC EDIT2 cw EnableWindow true cw GetDlgItem IDC connet cw EnableWindow true cw GetDlgItem IDC EDIT5 cw EnableWindow true 9 当失去与服务器的连接后 重新将连接服务器设置编辑框启用等待下次连接 8 在退出程序时的提示 如下图 图 3 16 退出确认 代码设置如下 void CTcpclientDlg OnClose int confirm MessageBox 确定退出吗 请确定 MB YESNO MB ICONQUESTION if confirm IDYES CString enterinfo clientname 退出了聊天室 int len enterinfo GetLength clconect Send enterinfo len CDialog OnClose 设计步骤 当退出程序时 弹出确认对话框 当选择 是 时 将用户退出信息发送至服务器并关闭对话框 至此客户端的核心部分介绍完毕 3 2 服务端的实现 1 和客户端一样 仍然建立一个基于对话框的工程 工程名为 tcpserver 同 样 注意一定不要忘记在 Step4 时勾选 Windows Sockets 选项 其他默认下一步 2 客户端主要分为三个窗口 第一个是服务器信息设置窗口 需要输入服务器 的相关设置信息 第二个是聊天信息显示窗口 该窗口显示启动服务器以来发送和接 收到的消息 第三个是消息编辑发送窗口 需要输入你要发送的信息内容并发送 新建一个对话框 并添加各种控件 见控件表 3 2 如下图 单击启动服务器按钮时的处理网络连接的函数 代码设置如下 void CTcpseverDlg Onlisten 10 Beep 2000 100 CString ipstr portstr int port GetDlgItemText IDC EDIT3 ipstr severname ipstr GetDlgItemText IDC EDIT4 portstr portstr TrimLeft portstr TrimRight port atoi portstr if port 0 cw GetDlgItem IDC EDIT4 cw EnableWindow false cw GetDlgItem IDC listen cw EnableWindow false cw GetDlgItem IDC EDIT1 cw SetWindowText 服务器名 severname r n 等待用户连接 监听端 口 portstr else MessageBox 设置监听端口失败 端口可能被其它程序占用 cslisten Close 11 else MessageBox 端口输入有误 请重新输入 设计步骤 创建字符串 ipstr 保存 IP portstr 保存端口 整型 port 端口号 利用 GetDlgItemText 将各个编辑框中的信息赋给相应的变量 监视端口号和 IP 格式并设置相应错误提示 设置建立连接后相应提示 5 接下来就是对话框中的发送 回车 按钮的函数 代码设置如下 void CTcpseverDlg Onsend CString str history GetDlgItemText IDC EDIT1 history GetDlgItemText IDC EDIT2 str str severname str int len str GetLength int sended for int i 1 iLineScroll ce GetLineCount 1 定义字符串 str 用于保存输入的消息 调整格式后使用 CSocket 的操作函数 send 将消息发送到各个客户端 6 要显示服务器接收到来自客户端其他用户的信息 代码设置如下 void CTcpseverDlg onrev int mynum 12 CString str str1 int i char ss 100 for int j 0 j 100 j ss j 0 csrev mynum Receive ss 100 str Format s ss for i 1 iLineScroll ce GetLineCount 1 设计步骤 创建字符串 str str1 字符数组 ss 接受来自服务器套接字的信息数据保存到 ss 中

温馨提示

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

评论

0/150

提交评论