软件课程设计报告简易网络聊天室.doc

上传人:仙人指路1688 文档编号:2387709 上传时间:2023-02-17 格式:DOC 页数:12 大小:101.50KB
返回 下载 相关 举报
软件课程设计报告简易网络聊天室.doc_第1页
第1页 / 共12页
软件课程设计报告简易网络聊天室.doc_第2页
第2页 / 共12页
软件课程设计报告简易网络聊天室.doc_第3页
第3页 / 共12页
软件课程设计报告简易网络聊天室.doc_第4页
第4页 / 共12页
软件课程设计报告简易网络聊天室.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《软件课程设计报告简易网络聊天室.doc》由会员分享,可在线阅读,更多相关《软件课程设计报告简易网络聊天室.doc(12页珍藏版)》请在三一办公上搜索。

1、中南民族大学软件课程设计报告 电信 学院 09 级 电子 专业题目 简易网络聊天室 学生 学号 指导教师 2012年4月26日 简易网络聊天系统摘要:本设计在VC+6.0平台下利用MFC对话框工程实现了简易聊天室的设计,完成了简易聊天的各项基本功能,界面友好。要求能网络侦听,接受多个客户端的连接,一个聊天服务器和很多客户端进行通信,接受客户端发送的信息,能分析信息的含义并在服务器停止服务时,停止端口侦听,将停止服务器信息发给所有客户端。在实际编程中运用了C+语言,并通过学习socket编程实现了局域网内各节点通信。关键字:MFC 聊天室 VC+编程 CSocket类1. 引言当今世界正处于信息

2、时代,在互联网相当普及的今天,大众已经对互联网形成了相当的依赖性,局域网内多节点通信已经是非常普遍的简单需求。聊天室是适合于陌生人之间进行较为主观、感兴化的讨论。所以有大部分的人会进入聊天室聊天,它会给人一个完全自由的聊天世界。基于SOCKET的局域网通信是一种灵活的、易于实现的、低成本的方法。它可以运行在各种使用TCP/IP协议作为通讯协议的网络上。而在SOCKET API的帮助下,开发基于SOCKET的局域网通信软件也是易于实现的。2. 设计依据及框图2.1 设计平台 本设计主要在VC+6.0平台下,基于MFC的界面编程主要是面向对象的方法来调用Windows API, 提供了文档框架视图

3、结构和活动文档这样的便于自定义的应用程序框架。同时,在Visual C+内部也内建了很多对MFC的例如类向导这样的支持以减少软件开发的时间 。2.2 设计思想本设计的总体思想是在基于MFC的界面编程基础上加入windows socket类实现局域网通信。本设计主要分为服务器端和客户端两部分组成。服务器端监听各个客户端节点发送的信息并把信息发送到相应的客户端。客户端实现发送和接受自己节点的信息。2.3 设计框图图1:连接过程流程图一是总体的连接过程流图,服务器端创建socket对象后启动监听,等待客户端与服务器连接,客户端发送连接请求后与服务器连接,然后与服务器直接通信。关闭时服务器关闭当前通信

4、,结束监听服务。3 各模块功能及主要模块的流程图3.1 各模块功能简介本设计主要分为以下各个模块:1、 用户登录服务器,客户端socket类创建,实现相应的监听功能。2、 客户端信息发送,客户端判断信息是否私聊信息,并把信息发送到服务器端。3、 客户端信息接受,客户端接受到服务器发送的信息后判断该信息为聊天信息是聊天信息还是用户列表信息。并在相信位置正确显示信息。4、 服务器启动监听,服务器创建socket类,实现监听功能。5、 服务器接受信息后,对信息完成相应的判断并发送到相应的客户端。3.2 主要流程图 图2:客户端登录流程图 图3:客户端信息发送流程图图2为客户端登录流程图,用户输入登录

5、信息后,程序创建socket对象,与服务器连接,如果连接成功,就把新用户昵称发送到服务器。图3为客户端信息发送流程图,判断信息是否是私聊信息,如果是则在发送信息前加入Privchat和私聊用户昵称,然后将信息发送到服务器。图4为客户端信息接受处理流程图,接受到信息后通过前面8个字母判断是否为用户列表信息,如果是,则根据信息的“|”分割依次获取用户昵称,并在用户列表框中完成显示。如果不是用户列表信息,则按照聊天信息在信息显示框完整显示接受到的信息。图5为服务器接受信息处理流程图,服务器接受到信息后判断是否为新用户登录,如果是,则向各个客户端节点发送所有用户列表。否则,判断信息是否为私聊信息,如果

6、是,则查找节点中昵称和私聊对象相同的用户,然后把信息发送到该节点。不是则判定信息为广播信息,把信息发送到每个用户节点。 图4:客户端信息接受处理 图5:服务器接受信息处理 4 软件调试分析设计最后运行效果如下: 图6:服务器界面截图 图7:客户端界面截图设计主要分为服务器端和客户端两个界面。图6和图7分别展示了服务器和客户端的界面效果。实现了群聊,私聊以及显示所有用户列表的功能。达到了简易聊天室的设计要求。5 结语5.1 结论与讨论本设计在VC+6.0平台下完成了简易网络聊天室,实现了简易聊天室的各项设计要求,设计界面友好。在本设主要是在MFC简易对话框工程下利用Csocket类实现局域网内通

7、信。MFC界面编程比较简单,本设计的主要难点是服务器和客户端之间私聊功能实现和用户列表信息与普通聊天信息的区别,个人在程序中通过把信息的前面8个字符赋予信息的区别意义,通过这几个字符判断信息的类型,再进行相信的处理。本设计完成了基本要求,但是文字字体大小和颜色设定以及聊天间表情的发送并不能实现,通过查阅相关资料,该功能的实现需要重载MFC中的RichEdit类,设计难度较大,暂未实现。通过本课程设计把以前学到的书本知识运用到了实际的设计,对理论知识有了更深刻的理解。看到了自己的设计成果,感受到了软件设定的乐趣。参考文献1 罗莉琴,詹祖桥.Windows网络编程.北京:人民邮电出版社,20112

8、 宋斌.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() myServerSock

9、et-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 (!mySe

10、rverSocket-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,myServerSock

11、et-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.GetTex

12、t(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.

13、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=; U

14、pdateData(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(); CStri

15、ng 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); /新的在线用户

16、昵称名单发给所有用户 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

17、;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); s

18、trcat(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; bu

19、ffk-i-1=0; m=pDlg-m_USER.GetCount(); for(i=0;im_USER.GetText(i,name); if (strcmp(name,sTemp)=0) List-OnlySend(buff,strlen(buff),i); else/聊天信息群发给所有用户List-Sends(buff,n); /Receive只能接受一次,除非下次发送触发后CString sTemp;sTemp.Format(收到:%s,buff);pDlg-m_ChatList.AddString(sTemp);pDlg-m_ChatList.SetTopIndex(pDlg-m_ChatList.GetCount()-1);CSocket:OnReceive(nErrorCode);致谢

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号