ImageVerifierCode 换一换
格式:DOC , 页数:14 ,大小:295.50KB ,
资源ID:12005325      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/12005325.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(VC--聊天室课程设计完整代码及程序.doc)为本站上传会员【仙人****88】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

VC--聊天室课程设计完整代码及程序.doc

1、网络聊天室课程设计 班级: 姓名: 学号: 时间: 目录 1.需求分析 2 2.相关知识 4 2.1 Winsock介绍 4 2.2 MFC类CAsyncsocket和CSocket 5 2.3 利用CSocket进行有连接的通信 6 3.详细设计 8 3.1客户端的实现 8 3.2服务端的实现 13 4.程序运行结果 20 4.1 服务器端 20 4.2 客户端 20 5.参考文献 22 1.需求分析 当前是数字信息时代,网络时代,任何一种编辑

2、工具都不能忽视在网络上的应用,并且随着Internet 的普及和宽带技术的成熟,越来越多的用户进入网络世界中享用浏览新闻、查询信息、发送邮件、在线观看电影等服务,享受网络带来的便利和办公的高效,与此同时一个新型的Web应用程序为网民之间提供了一个实时通信的功能和场所,这就是聊天室。 在网络早期就开始盛行,不论是BBS,IRC 都有类似网上聊天室的机制。聊天室为网友提供了实时性对话的渠道,是网络上极为流行的一项服务。 聊天室适用于网上会议或闲聊的一些场合。聊天室为网友提供了较好的交友环境,网友之间相互以文字交谈,在形式上有点类似笔友的性质,却大大节省了书信往返的时间,这也是网上交友之所以

3、如此热门的原因。 聊天室的设计目标 本课题是建立聊天通信模型,设计一个聊天室软件,包括服务器端和客户端,主要功能为: 服务器端功能: 1、 初始化socket, 创建服务器端。 2、 维护一个链表,保存所有用户的IP地址、端口信息。 3、 接受用户传送来的聊天信息,然后向链表中的所用用户转发。 4、 接受用户传送来的连接判断命令,并向用户发出响应命令。 客户端功能: 客户端界面上的两个文本框,一个用于显示接受的聊天信息,一个用来接受用户输入的聊天信息。当按下“发送”按钮时将信息发送给服务器。 通过本课题的毕业设计,可以比较深入的了解和掌握WINSOCK控件基

4、本属性、方法和事件,理解网络聊天通信的概念,输控制协议(TCP)进行数据交流,初步掌握网络聊天通信程序的设计方法。并能巩固和扩展大学期间的学习内容,进行项目的设计开发训练,更好的适应社会的需求。 - 14 - 2.相关知识 2.1 Winsock介绍 Windows Sockets规范以U.C. Berkeley大学BSD UNIX中流行的Socket接口为范例定义了一套Micosoft Windows下网络编程接口。它不仅包含了人们所熟悉的Berkeley Socket风格的库函数;也包含了一组针对Windows的扩展库函数,以使程序员能充分地利用Windows消息驱动机制进

5、行编程。     Windows Sockets规范本意在于提供给应用程序开发者一套简单的API,并让各家网络软件供应商共同遵守。此外,在一个特定版本Windows的基础上,Windows Sockets也定义了一个二进制接口(ABI),以此来保证应用Windows Sockets API的应用程序能够在任何网络软件供应商的符合Windows Sockets协议的实现上工作。因此这份规范定义了应用程序开发者能够使用,并且网络软件供应商能够实现的一套库函数调用和相关语义。 2.2 MFC类CAsyncsocket和CSocket 构造一个 CAsyncSocket 对象并使用该对象创建基

6、础 SOCKET 句柄。 套接字的创建遵循两阶段构造的 MFC 模式。 例如: CAsyncSocket sock;sock.Create( ); // Use the default parameters 对于服务器套接字,必须指定端口。对于客户端套接字,通常接受此参数的默认值,该值允许 Windows Sockets 选择端口。 套接字类型: SOCK_STREAM (默认值)或 SOCK_DGRAM 。 套接字“地址”,如“”或“128.56.22.8”。 该地址为网络上的网际协议 (IP) 地址。很可能要始终依赖此参数的默认值。 如果套接字是客户端,则使

7、用 CAsyncSocket::Connect 将此套接字对象连接到服务器套接字。 销毁 CAsyncSocket 对象。 如果在堆栈上创建了套接字对象,当包含函数超出范围时将调用此对象的析构函数。如果使用 new 运算符在堆上创建了套接字对象,则必须负责使用 delete 运算符销毁此对象。 “阻塞”方案。 发送和接收计算机之间的字节顺序差异。 在 Unicode 和多字节字符集 (MBCS) 字符串之间转换。 2.3 利用CSocket进行有连接的通信 CAsyncSocket类逐个封装了WinSock API,为高级网络程序员 提供了更加有力而灵活的方法。这个

8、类基于程序员了解网络通讯的假设,目的是为了在MFC中使用WinSock,程序员有责任处理诸如阻塞、字节顺序和在Unicode与MBCS 间转换字符的任务。为了提供更方便的接口以自动处理这些任务,MFC给出 了CSocket类,这个类是由CAsyncSocket类继承下来的,它提供了比CAsyncSocket更高层的WinSock API接口。Csocket类和CsocketFile类可以与Carchive类一起合作来管理发送和接收的数据,这使管理数据收发更加便利。CSocket对象提供阻塞模式,这对于Carchive的同步操作是至关重要的。阻塞函数(如Receive()、Send()、Rece

9、iveFrom()、SendTo() 和Accept())直到操作完成后才返回控制权。 3.1客户端的实现 (1)首先启动Visual C++ 6.0,利用MFC AppWizard[EXE]建立一个新的MFC工程,工程名为tcpclient,在MFC AppWizard Step1的时候选择Dialog based 即基于对话框,在Step4时勾选Windows Sockets选项(如图3.11),其他默认值下一步。 图3.11 MFC的设置 (2)客户端主要分为三个窗口,第一个是连接窗口,需要输入连接到服务器的相关设置信息;第二个是聊天信息显示窗口,该窗口显示登录服

10、务器以来发送和接收到的消息;第三个是消息编辑发送窗口,需要输入你要发送的信息内容并发送。 (单击连接服务器按钮时的处理网络连接的函数。代码设置如下: 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_ED

11、IT2,portstr); GetDlgItemText(IDC_EDIT5,clientname); portstr.TrimLeft(); portstr.TrimRight(); port=atoi(portstr); if(port>0&&port<9999){ clconect.Create(); // cslisten.Bind(port); if(clconect.Connect(ipstr,port)) { clconect.setp(this); CWnd *cw=GetDlgItem(IDC_EDIT1);

12、 cw->EnableWindow(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+

13、"进入聊天室"; int len=enterinfo.GetLength(); clconect.Send(enterinfo,len); } else{ clconect.Close(); MessageBox("连接失败,请检查IP与端口是否与服务器一致!或者服务器没打开","连接错误",MB_ICONERROR); } } else{ MessageBox("端口或IP输入有误,请重新输入"); } } 设计步骤: ①创建字符串ipstr(保存IP),portstr(保存端口),clientname(用户名),整型

14、port(端口号)。 ②利用GetDlgItemText将各个编辑框中的信息赋给相应的变量。 ③监视端口号和IP格式并设置相应错误提示(如下图)。 图3.13 连接错误提示 图3.14 端口或IP错误提示 ④创建套接字clconect,设置成功创建后相关控件为只读。 ⑤设置建立连接后相应提示。 (5)接下来就是对话框中的发送(回车)按钮的函数,代码设置如下: void CTcpclientDlg::Onsend() { CString str; GetDlgItemText(IDC_EDIT4,str); s

15、tr=clientname+":"+str; int len=str.GetLength(); if(clconect.Send(str,len)>1)SetDlgItemText(IDC_EDIT4,""); } 定义字符串str用于保存输入的消息,调整格式后使用CSocket的操作函数send将消息发送到服务器。 (6)要显示客户端接收到来自服务器其他用户的信息,代码设置如下: void CTcpclientDlg::onrev() { CString str,str1; char ss[256]; for(int j=0;j<256;j++) ss[j]

16、'\0'; clconect.Receive(ss,256); if(ss!="") str.Format("%s",ss); GetDlgItemText(IDC_EDIT3,str1); str=str1+"\r\n"+str; SetDlgItemText(IDC_EDIT3,str); CEdit *ce=((CEdit*)GetDlgItem(IDC_EDIT3)); ce->LineScroll(ce->GetLineCount()-1);; } 设计步骤: ①创建字符串str、str1,字符数组ss。 ②接受来自服务器套接

17、字的信息数据保存到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(ID

18、C_connet); cw->EnableWindow(true); cw=GetDlgItem(IDC_EDIT5); cw->EnableWindow(true); } 当失去与服务器的连接后,重新将连接服务器设置编辑框启用等待下次连接。 (8)在退出程序时的提示,如下图: 图3.16 退出确认 代码设置如下: void CTcpclientDlg::OnClose() { int confirm=MessageBox("确定退出吗","请确定",MB_YESNO|MB_ICONQUESTION); if(confirm==IDYES){ CSt

19、ring enterinfo=clientname+"退出了聊天室"; int len=enterinfo.GetLength(); clconect.Send(enterinfo,len); CDialog::OnClose(); } } 设计步骤: ①当退出程序时,弹出确认对话框。 ②当选择“是”时,将用户退出信息发送至服务器并关闭对话框。 至此客户端的核心部分介绍完毕。 3.2服务端的实现 (1)和客户端一样,仍然建立一个基于对话框的工程,工程名为tcpserver,同样,注意一定不要忘记在Step4时勾选Windows Sockets选项。其他默认

20、下一步。 (2)客户端主要分为三个窗口,第一个是服务器信息设置窗口,需要输入服务器的相关设置信息;第二个是聊天信息显示窗口,该窗口显示启动服务器以来发送和接收到的消息;第三个是消息编辑发送窗口,需要输入你要发送的信息内容并发送。 新建一个对话框,并添加各种控件(见控件表3.2)如下图: 单击启动服务器按钮时的处理网络连接的函数。代码设置如下: void CTcpseverDlg::Onlisten() { // Beep(2000,100); CString ipstr,portstr; int port; GetDlgItem

21、Text(IDC_EDIT3,ipstr); severname=ipstr; GetDlgItemText(IDC_EDIT4,portstr); portstr.TrimLeft(); portstr.TrimRight(); port=atoi(portstr); if(port>0&&port<9999){ if(cslisten.Create(port)){ // cslisten.Bind(port); cslisten.Listen(); cslisten.setp(this,csnum); cslisten.List

22、en(); CWnd *cw=GetDlgItem(IDC_EDIT3); cw->EnableWindow(false); cw=GetDlgItem(IDC_EDIT4); cw->EnableWindow(false); cw=GetDlgItem(IDC_listen); cw->EnableWindow(false); cw=GetDlgItem(IDC_EDIT1); cw->SetWindowText("服务器名:"+severname+"\r\n等待用户连接,监听端口:"+portstr+"..."); }

23、 else{ MessageBox("设置监听端口失败,端口可能被其它程序占用"); cslisten.Close(); } } else{ MessageBox("端口输入有误,请重新输入"); } } 设计步骤: ①创建字符串ipstr(保存IP),portstr(保存端口),整型port(端口号)。 ②利用GetDlgItemText将各个编辑框中的信息赋给相应的变量。 ③监视端口号和IP格式并设置相应错误提示 ④设置建立连接后相应提示。 (5)接下来就是对话框中的发送(回车)按钮的函数,代码设置如下: void CTcpse

24、verDlg::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;i<=csnum;i++) if(csrev[i]) if( sended=csrev[i].Send(str,len)) { SetDlgItemText(IDC_EDIT2,"");SetDl

25、gItemText(IDC_EDIT1,history+"\r\n"+str); CEdit *ce=((CEdit*)GetDlgItem(IDC_EDIT1)); ce->LineScroll(ce->GetLineCount()-1);;} } 定义字符串str用于保存输入的消息,调整格式后使用CSocket的操作函数send将消息发送到各个客户端。 (6)要显示服务器接收到来自客户端其他用户的信息,代码设置如下: void CTcpseverDlg::onrev(int mynum) { CString str,str1;int i; char ss[

26、100]; for(int j=0;j<100;j++) ss[j]='\0'; csrev[mynum].Receive(ss,100); str.Format("%s",ss); for(i=1;i<=csnum;i++)if(csrev[i]) if(csrev[i]) csrev[i].Send(str,100); GetDlgItemText(IDC_EDIT1,str1); str=str1+"\r\n"+str; SetDlgItemText(IDC_EDIT1,str); CEdit *ce=((CEdit*)Get

27、DlgItem(IDC_EDIT1)); ce->LineScroll(ce->GetLineCount()-1);; } 设计步骤: ①创建字符串str、str1,字符数组ss。 ②接受来自服务器套接字的信息数据保存到ss中,调整格式后将其打印到消息区。 (7)当有新用户进入时,显示“XXX进入”。 代码如下: void CTcpseverDlg::onac() { CString str1,str; GetDlgItemText(IDC_EDIT1,str1); CString str2="\r\n进入"; str=str1+str2; Set

28、DlgItemText(IDC_EDIT1,str); cslisten.Accept(csrev[++csnum]); csrev[csnum].setp(this,csnum); } (8)在退出程序时的提示,如下图: 图3.24 退出确认 代码设置如下: void CTcpseverDlg::OnClose() { CString str="服务器即将退出"; int confirm=MessageBox("确定退出服务器?所有用户都将断开","请确定",MB_YESNO|MB_ICONQUESTION); if(confirm==IDYES)

29、{ int len=str.GetLength(); for(int i=1;i<=csnum;i++) if(csrev[i]) csrev[i].Send(str,len); str=severname+"退出,与服务器连接已断开"; len=str.GetLength(); for( i=1;i<=csnum;i++) if(csrev[i]) csrev[i].Send(str,len); CDialog::OnClose(); } } 设计步骤: ①当退出程序时,弹出确认对话框。 ②当选择“是”时,将服务器关闭信息发送至各个客户端并关闭对话框。 .程序运行结果 4.1 服务器端 图 4.4.2 客户端 图 4.2

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服