好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

基于Visual C的聊天室的设计与开发.doc

16页
  • 卖家[上传人]:lizhe****0001
  • 文档编号:29377602
  • 上传时间:2018-01-24
  • 文档格式:DOC
  • 文档大小:352.50KB
  • / 16 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • JDFJKDHFKAHGJHLKFHJHAKHFLJKDHFKLJASHDFKJHAKLDFHDLSFHKLDSJDFSGSJDFKGHERUHJKDHKLSHDKJHKSHKFHLKGHDLSFGHDSKLFHGLDKSFHGLKFGDS题目:基于 Visual C++的聊天室程序设计 姓 名:        学 号:        班 级:        指导教师:     专 业:        计算机网络课程设计JDFJKDHFKAHGJHLKFHJHAKHFLJKDHFKLJASHDFKJHAKLDFHDLSFHKLDSJDFSGSJDFKGHERUHJKDHKLSHDKJHKSHKFHLKGHDLSFGHDSKLFHGLDKSFHGLKFGDS1. 引言计算机网络技术发展至今已经大大超越了人们当初的预想,无论是人们日常的工作还是学习,我们都越来越多的依靠到互联网各种实时性的聊天娱乐软件也同时诞生,而且为我们的即时通讯带来了众多的方便,比如说大家所熟知的腾讯 、微软的MSN、移动的 Fetion 等,都是做的比较成功的实时聊天工具随着网络的日益普及,各种聊天工具也层出不穷,但当我们学习了《TCP/IP 协议与网络编程》这门课程之后,我们便会觉得,其实要实现简单的网络通讯其实并不难。

      接下来的课程设计就是针对一个简单的网络聊天程序,利用 MFC 为开发工具,实现基本的通讯功能 1.1 聊天室程序的开发背景近年来,互连网发展日新月异,网络使空间的距离不再成为人们沟通的障碍,世界各个角落的人们可以通过 Internet 收发邮件、实时聊天、获取最新的资讯因此本次毕业设计以“面向连接的 Winsock 网络会话程序开发”为题,制作一个 C/S 聊天室程序,通过制作该程序还能更好的学习网络 socket 编程的相关知识 1.2 聊天室的设计目标 本课题是建立聊天通信模型,设计一个聊天室软件,包括服务器端和客户端,主要功能为: 服务器端功能:1、 初始化 socket, 创建服务器端2、 维护一个链表,保存所有用户的 IP 地址、端口信息3、 接受用户传送来的聊天信息,然后向链表中的所用用户转发4、 接受用户传送来的连接判断命令,并向用户发出响应命令客户端功能:客户端界面上的两个文本框,一个用于显示接受的聊天信息,一个用来接受用户输入的聊天信息当按下“发送”按钮时将信息发送给服务器 通过本课题的毕业设计,可以比较深入的了解和掌握 WINSOCK 控件基本属性、方法和事件,理解网络聊天通信的概念,输控制协议(TCP)进行数据交流,初步掌握网络聊天通信程序的设计方法。

      并能巩固和扩展大学期间的学习内容,进行项目的设计开发训练,更好的适应社会的需求2.总体设计 2.1 功能要求JDFJKDHFKAHGJHLKFHJHAKHFLJKDHFKLJASHDFKJHAKLDFHDLSFHKLDSJDFSGSJDFKGHERUHJKDHKLSHDKJHKSHKFHLKGHDLSFGHDSKLFHGLDKSFHGLKFGDS 支持多个客户端的连接,在服务器和多个客户端之间进行数据传输; 接收客户端发送的消息,并显示在一个列表框中; 在用户连接上后有提示,显示出连接的用户名字; 发送信息时可以显示聊天的所有记录;2.3 系统主要功能和主要功能描述:服务器端聊天程序必须能够做 3 件事情:(1) 服务器聊天程序要在待定的端口上等待来自聊天客户的连接请求,并且需要维护一个客户连接表,以记录所有成功的连接2) 服务器聊天程序要及时接受从各个聊天客户发送过来的信息,然后把这些信息转发到一个或多个客户连接对于公共聊天室,服务器将把接受到的信息向除源端外的所有客户发送过去3) 服务器还要监控这些连接的状态,在客户主动离开或发生故障时从列表中删除相应的表项,并及时更新连接表。

      这些要求可以通过 CSocket 类提供的功能实现从 CSocket 派生出两个类CListenSocket 和 CClientSocket,它们分别用来侦听客户的连接请求和建立与客户的连接服务器只需要一个侦听套接字 CListenSocket,然后根据客户的连接请求动态创建客户套接字 CClientSocket客户套接字的数量是不可预知的,因此需要一个列表来记录MFC 的 CPtrList 类就能实现这种功能客户端聊天程序需要完成以下几个功能:(1) 客户端聊天程序要负责建立和维护与服务器的连接,通过获取用户的设置尝试与服务器的连接,并且随时检测连接的状态2) 客户端聊天程序要把用户输入的信息及时发送到聊天服务器一般情况下,当用户输入一行信息并且按下回车键后聊天程序就要把这一行信息发送出去,才能及时地满足用户的交互需求3) 要随时准备好接受来自服务器的信息,随时把接受到的信息显示出来,让用户及时看到对方的响应4) 在用户退出聊天过程是要关闭与服务器的连接比较好的做法是提前通知服务器JDFJKDHFKAHGJHLKFHJHAKHFLJKDHFKLJASHDFKJHAKLDFHDLSFHKLDSJDFSGSJDFKGHERUHJKDHKLSHDKJHKSHKFHLKGHDLSFGHDSKLFHGLDKSFHGLKFGDS或者直接给服务器发送一条退出通知,使得服务器能够及时掌握客户端的连接状态,把对方客户的退出信息及时发送到对等实体上。

      客户端聊天程序需要使用一个通过 CSocket 类派生出来的 CChatSocket 类来实现该套接字用来发送一个与服务器的连接请求和维持与服务器的连接,发送和接收聊天信息,完成上述各项功能3. 详细设计3.1 设计流程图启动 登陆等待客户端登陆客户端用户创建子套接字MessageCListenSocket CClientSocketMessage登陆成功连接上发送 message显示找到客户端并显示登陆失败发送 ID 和IPJDFJKDHFKAHGJHLKFHJHAKHFLJKDHFKLJASHDFKJHAKLDFHDLSFHKLDSJDFSGSJDFKGHERUHJKDHKLSHDKJHKSHKFHLKGHDLSFGHDSKLFHGLDKSFHGLKFGDS3.2 客户端的实现(1)首先启动 Visual C++ 6.0,利用 MFC AppWizard[EXE]建立一个新的 MFC 工程,工程名为 tcpclient,在 MFC AppWizard Step1 的时候选择 Dialog based 即基于对话框,在Step4 时勾选 Windows Sockets 选项(如图 3.11) ,其他默认值下一步。

      JDFJKDHFKAHGJHLKFHJHAKHFLJKDHFKLJASHDFKJHAKLDFHDLSFHKLDSJDFSGSJDFKGHERUHJKDHKLSHDKJHKSHKFHLKGHDLSFGHDSKLFHGLDKSFHGLKFGDS图 3.11 MFC 的设置(2)客户端主要分为三个窗口,第一个是连接窗口,需要输入连接到服务器的相关设置信息;第二个是聊天信息显示窗口,该窗口显示登录服务器以来发送和接收到的消息;第三个是消息编辑发送窗口,需要输入你要发送的信息内容并发送新建一个对话框,并添加各种控件(见控件表 3.1)如下图:图 3.12 聊天窗口布局JDFJKDHFKAHGJHLKFHJHAKHFLJKDHFKLJASHDFKJHAKLDFHDLSFHKLDSJDFSGSJDFKGHERUHJKDHKLSHDKJHKSHKFHLKGHDLSFGHDSKLFHGLDKSFHGLKFGDS表 3.1 控件类型及各自 ID标题 控件类型 控件 ID连接 Static IDC_STATIC信息区 Static IDC_STATIC我的 ID: Static IDC_STATIC服务器 ID: Static IDC_STATIC端口号(默认 520) Static IDC_STATIC连接服务器 Button IDC_connet发送(回车) Button IDC_send编辑框 1 Edit IDC_EDIT1编辑框 2 Edit IDC_EDIT2编辑框 3 Edit IDC_EDIT3编辑框 4 Edit IDC_EDIT4编辑框 5 Edit IDC_EDIT5其中编辑框 1:服务器 IP;编辑框 2:端口号;编辑框 3:消息显示区;编辑框 4:消息编辑区;编辑框 5:我的 ID。

      3)服务器 IP 编辑框控件 IDC_EDIT1 对应的成员变量为 OnChangeEdit1端口号编辑框控件 IDC_EDIT2 对应的成员变量为 OnChangeEdit2消息显示区编辑框控件 IDC_EDIT3 对应的成员变量为 OnChangeEdit3消息编辑区编辑框控件 IDC_EDIT4 对应的成员变量为 OnChangeEdit4我的 ID 编辑框控件 IDC_EDIT5 对应的成员变量为 OnChangeEdit5(4)下面重点介绍一下单击连接服务器按钮时的处理网络连接的函数代码设置如下:void CTcpclientDlg::Onconnet() {// TODO: Add your control notification handler code hereif(clconect) clconect.Close();CString ipstr,portstr;int port;GetDlgItemText(IDC_EDIT1,ipstr);GetDlgItemText(IDC_EDIT2,portstr);GetDlgItemText(IDC_EDIT5,clientname);JDFJKDHFKAHGJHLKFHJHAKHFLJKDHFKLJASHDFKJHAKLDFHDLSFHKLDSJDFSGSJDFKGHERUHJKDHKLSHDKJHKSHKFHLKGHDLSFGHDSKLFHGLDKSFHGLKFGDSportstr.TrimLeft();portstr.TrimRight();port=atoi(portstr);if(port>0&&portEnableWindow(false);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);}}else{MessageBox("端口或 IP 输入有误,请重新输入");}}设计步骤:①创建字符串 ipstr(保存 IP),portstr(保存端口) ,clientname(用户名) ,整型port(端口号) 。

      ②利用 GetDlgItemText 将各个编辑框中的信息赋给相应的变量③监视端口号和 IP 格式并设置相应错误提示(如下图) JDFJKDHFKAHGJHLKFHJHAKHFLJKDHFKLJASHDFKJHAKLDFHDLSFHKLDSJDFSGSJDFKGHERUHJKDHKLSHDKJHKSHKFHLKGHD。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.