软件课程设计报告---简易网络聊天室.doc_第1页
软件课程设计报告---简易网络聊天室.doc_第2页
软件课程设计报告---简易网络聊天室.doc_第3页
软件课程设计报告---简易网络聊天室.doc_第4页
软件课程设计报告---简易网络聊天室.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

中南民族大学软件课程设计报告 电信 学院 09 级 电子 专业题目 简易网络聊天室 学生 学号 指导教师 2012年4月26日 简易网络聊天系统摘要:本设计在vc+6.0平台下利用mfc对话框工程实现了简易聊天室的设计,完成了简易聊天的各项基本功能,界面友好。要求能网络侦听,接受多个客户端的连接,一个聊天服务器和很多客户端进行通信,接受客户端发送的信息,能分析信息的含义并在服务器停止服务时,停止端口侦听,将停止服务器信息发给所有客户端。在实际编程中运用了c+语言,并通过学习socket编程实现了局域网内各节点通信。关键字:mfc 聊天室 vc+编程 csocket类1. 引言当今世界正处于信息时代,在互联网相当普及的今天,大众已经对互联网形成了相当的依赖性,局域网内多节点通信已经是非常普遍的简单需求。聊天室是适合于陌生人之间进行较为主观、感兴化的讨论。所以有大部分的人会进入聊天室聊天,它会给人一个完全自由的聊天世界。基于socket的局域网通信是一种灵活的、易于实现的、低成本的方法。它可以运行在各种使用tcp/ip协议作为通讯协议的网络上。而在socket api的帮助下,开发基于socket的局域网通信软件也是易于实现的。2. 设计依据及框图2.1 设计平台 本设计主要在vc+6.0平台下,基于mfc的界面编程主要是面向对象的方法来调用windows api, 提供了文档框架视图结构和活动文档这样的便于自定义的应用程序框架。同时,在visual c+内部也内建了很多对mfc的例如类向导这样的支持以减少软件开发的时间 。2.2 设计思想本设计的总体思想是在基于mfc的界面编程基础上加入windows socket类实现局域网通信。本设计主要分为服务器端和客户端两部分组成。服务器端监听各个客户端节点发送的信息并把信息发送到相应的客户端。客户端实现发送和接受自己节点的信息。2.3 设计框图图1:连接过程流程图一是总体的连接过程流图,服务器端创建socket对象后启动监听,等待客户端与服务器连接,客户端发送连接请求后与服务器连接,然后与服务器直接通信。关闭时服务器关闭当前通信,结束监听服务。3 各模块功能及主要模块的流程图3.1 各模块功能简介本设计主要分为以下各个模块:1、 用户登录服务器,客户端socket类创建,实现相应的监听功能。2、 客户端信息发送,客户端判断信息是否私聊信息,并把信息发送到服务器端。3、 客户端信息接受,客户端接受到服务器发送的信息后判断该信息为聊天信息是聊天信息还是用户列表信息。并在相信位置正确显示信息。4、 服务器启动监听,服务器创建socket类,实现监听功能。5、 服务器接受信息后,对信息完成相应的判断并发送到相应的客户端。3.2 主要流程图 图2:客户端登录流程图 图3:客户端信息发送流程图图2为客户端登录流程图,用户输入登录信息后,程序创建socket对象,与服务器连接,如果连接成功,就把新用户昵称发送到服务器。图3为客户端信息发送流程图,判断信息是否是私聊信息,如果是则在发送信息前加入privchat和私聊用户昵称,然后将信息发送到服务器。图4为客户端信息接受处理流程图,接受到信息后通过前面8个字母判断是否为用户列表信息,如果是,则根据信息的“|”分割依次获取用户昵称,并在用户列表框中完成显示。如果不是用户列表信息,则按照聊天信息在信息显示框完整显示接受到的信息。图5为服务器接受信息处理流程图,服务器接受到信息后判断是否为新用户登录,如果是,则向各个客户端节点发送所有用户列表。否则,判断信息是否为私聊信息,如果是,则查找节点中昵称和私聊对象相同的用户,然后把信息发送到该节点。不是则判定信息为广播信息,把信息发送到每个用户节点。 图4:客户端信息接受处理 图5:服务器接受信息处理 4 软件调试分析设计最后运行效果如下: 图6:服务器界面截图 图7:客户端界面截图设计主要分为服务器端和客户端两个界面。图6和图7分别展示了服务器和客户端的界面效果。实现了群聊,私聊以及显示所有用户列表的功能。达到了简易聊天室的设计要求。5 结语5.1 结论与讨论本设计在vc+6.0平台下完成了简易网络聊天室,实现了简易聊天室的各项设计要求,设计界面友好。在本设主要是在mfc简易对话框工程下利用csocket类实现局域网内通信。mfc界面编程比较简单,本设计的主要难点是服务器和客户端之间私聊功能实现和用户列表信息与普通聊天信息的区别,个人在程序中通过把信息的前面8个字符赋予信息的区别意义,通过这几个字符判断信息的类型,再进行相信的处理。本设计完成了基本要求,但是文字字体大小和颜色设定以及聊天间表情的发送并不能实现,通过查阅相关资料,该功能的实现需要重载mfc中的richedit类,设计难度较大,暂未实现。通过本课程设计把以前学到的书本知识运用到了实际的设计,对理论知识有了更深刻的理解。看到了自己的设计成果,感受到了软件设定的乐趣。参考文献1 罗莉琴,詹祖桥.windows网络编程.北京:人民邮电出版社,20112 宋斌.visual c+6.0教程.北京:北京希望电子出版社 ,19993 郑莉,董江舟.c+语言程序设计.北京:清华大学出版社,2010附录本设计中主要用到的算法程序附录如下(完整程序见电子档工程附件)1、 客户端网络链接程序代码void cchatroomdlg:onconnectbutton() / todo: add your control notification handler code here updatedata(true); char *nikename,*address; int n; if (!myserversocket-create() myserversocket-close(); afxmessagebox(网络创建错误!); return; n=m_idc_edit_address.getlength(); address=new char(n+1); sprintf(address,%s,m_idc_edit_address.getbuffer(n); addressn=0; n=m_idc_edit_nikename.getlength(); nikename=new char(n+1); sprintf(nikename,%s,m_idc_edit_nikename.getbuffer(n); nikenamen=0; if (!myserversocket-connect(address,6767) myserversocket-close(); afxmessagebox(网络连接错误,请检查服务器地址。); return; m_bnsend.enablewindow(true); /发送信息按钮状态为有效 m_bnexit.enablewindow(true); /离开聊天室按钮状态为有效 myserversocket-nikename=nikename; /*发送新用户昵称 char message220; strcpy(message2,new_user:); strcat(message2,myserversocket-nikename); if (myserversocket-send(message2,20) elseafxmessagebox(网络传输错误!);2、 客户端信息发送程序void cchatroomdlg:onbutton1() /发送按钮的函数/ todo: add your control notification handler code here int n; char message1000; cstring to_name; updatedata(true); if(m_sl=true) /私聊 if(m_user.getcursel()=0) m_user.gettext(m_user.getcursel(),to_name); m_idc_edit_message=myserversocket-nikename+悄悄对+to_name+说:rn+m_idc_edit_message; m_idc_list_chatbox_control.addstring(m_idc_edit_message); m_idc_edit_message=privchat|+to_name+|+m_idc_edit_message; n=m_idc_edit_message.getlength(); sprintf(message,%s,m_idc_edit_message.getbuffer(n); messagen=0; else afxmessagebox(没有选择私聊对象!); return ; else m_idc_edit_message=myserversocket-nikename+对大家说:rn +m_idc_edit_message; n=m_idc_edit_message.getlength(); sprintf(message,%s,m_idc_edit_message.getbuffer(n); messagen=0; if (myserversocket-send(message,n+1) m_idc_edit_message=; updatedata(false); else afxmessagebox(网络传输错误!); 3、客户端信息接受程序bool cchatroomdlg:getmessage()/显示聊天信息char buff2000;char name20;int count;count=myserversocket-receive(buff,2000); buffcount=0;char flag10;for(int i=0;i8;i+) flagi=buffi;flag8=0; if(strcmp(flag,userlist)=0)/新用户昵称列表 m_user.resetcontent(); cstring stemp;int j=8;for(i=8;buffi!=0;i+) if(buffi=|)/昵称分割符号 for(int m=0;jreceive(buff,1000); buffn=0;char flag10;for(int i=0;im_pmainwnd; if(strcmp(flag,new_user)=0)/新用户加入 cstring stemp;for(i=9;buffi!=0;i+)buffi-9=buffi; buffi-9=0; stemp.format(%s,buff);/新用户昵称stemp pdlg-m_user.addstring(stemp); /新的在线用户昵称名单发给所有用户 m=pdlg-m_user.getcount(); strcpy(all_user,userlist);for(i=0;im_user.gettext(i,name); strcat(all_user,name); strcat(all_user,|); strcat(buff,进入聊天室); /list-sends(this,buff,strlen(buff); list-sends(all_user,strlen(all_user); else if(strcmp(flag,closeuse)=0)/用户退出cstring stemp;for(i=9;buffi!=0;i+)buffi-9=buffi; buffi-9=0; stemp.format(%s,buff);/离线用户昵称 m=pdlg-m_user.getcount(); for(i=0;im_user.gettext(i,name); if (strcmp(name,buff)=0) pdlg-m_user.deletestring(i); /新的在线用户昵称名单发给所有用户 m=pdlg-m_user.getcount(); strcpy(all_user,userlist);for(i=0;im_user.gettext(i,name); strcat(all_user,name); strcat(all_user,|); strcat(buff,离开聊天室);list-sends(all_user,strlen(all_user); list-del(this); /list-sends(this,buff,strlen(buff); else /* if(strcmp(flag,privchat)=0)/私聊cstring stemp;for(i=9;buffi!=|;i+)buffi-9=buffi; buffi-9=0;stemp.format(%s,buff);/私聊对象昵称 for(int k=i+1;buffk!=0;k+)buffk-i-1=buffk; buffk-i-1=0; m=pdlg-m_user.getcount(); for(i=0;im_user.gettext(i,name

温馨提示

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

评论

0/150

提交评论