Linux基于TCP的网络聊天室软件131_第1页
Linux基于TCP的网络聊天室软件131_第2页
Linux基于TCP的网络聊天室软件131_第3页
Linux基于TCP的网络聊天室软件131_第4页
Linux基于TCP的网络聊天室软件131_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、淮海 工学院 计算机工程学院课程设计报告设计名称: Linux 程序设计选题名称: 基于TCP的网络聊天室的设计与实现姓 名:_姓 名:姓 名:_专业班级:软件工程系 (院): 计算机工程学院设计时间: 2016.11.162016.12.7设计地点:软件实验室、教室成绩:指导教师评语:签名: 1 .课程设计目的Linux程序设计是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。其目的在于通过实践加深学生对Linux程序设计的理论、方法和基础知识的理解,掌握使用C语言进行Linux程序设计的基本方法,提高运用所学知识分析实际问题、解决实际问题的能力。2.

2、 课程设计任务与要求:2.1课程设计要求课程设计选用 VIM、GDB和SecureCRT作为开发平台以提高开发效率,尽可能熟练掌握其开 发环境。采用结构化程序设计技术进行系统的分析设计,在Visio中画出系统功能结构图和程序流程图,并将相应的图例说明复制到设计报告中。通过这次设计,要求掌握以下内容:1)Linux C编程工具:GCC和GDB2)文件I/O操作3)文件属性及目录操作4)终端控制与信号处理5 )进程控制6)进程间通信7 )流式套接字编程8 )线程管理2.2课程设计任务(大作业课题一)1 )课题名称:基于 TCP的网络聊天室的设计和实现。2)内容描述:实现目标:一个在Linux下可以

3、使用的聊天软件,要求实现如下功能:采用 Client/Server 架构Client A登陆聊天服务器前,需要注册自己的ID和密码 注册成功后,Client A就可以通过自己的ID和密码登陆聊天服务器 多个Client X可以同时登陆聊天服务器之后,与其他用户进行通讯聊天 Client A成功登陆后可以查看当前聊天室内其他在线用户Client XClient A可以选择发消息给某个特定的Client X,即“悄悄话”功能Client A可以选择发消息全部的在线用户,即“群发消息”功能Client A在退出时需要保存聊天记录 Server端维护一个所有登陆用户的聊天会的记录文件,以便备查可以选择

4、实现的附加功能:Server可以内建一个特殊权限的账号admin,用于管理聊天室Admin可以将某个Client X “踢出聊天室”3) 附加功能:文件传输3. 课程设计说明书3.1需求分析随着科学技术和社会的不断发展,计算机产业越来越发达。人们对于电子信息产品的需求越来越大,在这样一个信息时代,交流的方式日趋多元化和网络化。通信产业的发展非常迅猛,现在的科技已经可以实现很多种网络交流方式和信息传播方式,但是聊天室一直是最基础之一。聊天室技术仍然是我们学习的基础和重点。本次课题将全面的分析与设计一个网络聊天室。网络聊天室现在已经有相当成熟的发展了,QQ,微信等主流的聊天工具是这项技术的代表。在

5、当下成熟的编程环境下,聊天室的设计与实现是一个重要的基础练习。下面将简要介绍一下网络聊天室的特点:1) 便捷性:摆脱了传统的通信方式,利用网络的廉价性,可以使用户更加自由地相互交流。2) 安全性:网络环境下,用户可以针对地去了解自己想要了解的信息,交流时可以使用虚拟的身份,一定程度上很好地保护了用户的个人隐私信息。3) 实时性:用户只要与想要通信的另一方取得联系,即可想面对面对话一样交流。3.2概要设计本次试验设计一个网络聊天室,该软件采用Client/Server架构。聊天室的功能主要有:1) Client A登陆聊天服务器前,需要注册自己的ID和密码2) 注册成功后,Client A就可以

6、通过自己的ID和密码登陆聊天服务器3) 多个Client X可以同时登陆聊天服务器之后,与其他用户进行通讯聊天4) Client A成功登陆后可以查看当前聊天室内其他在线用户Client X5) Client A可以选择发消息给某个特定的Client X,即“悄悄话”功能6) Client A可以选择发消息全部的在线用户,即“群发消息”功能7) Client A在退出时需要保存聊天记录8) Server端维护一个所有登陆用户的聊天会的记录文件,以便备查3.3详细设计1)功能结构图:查看聊天室用户传送文件发送消息登声注册关闭服务器查看在线用户踢出用户2)程序流程图:注册:开始注册成功t退出程序1

7、1.结束登录:1F登录ri=01r开始i3T用户名存在i日+1退出客户端输入密码密码正确进入聊天室结束传送文件:开始T结束发送消息:1f输入发送的消息1r读取标志位I开始判断标志位结束4.课程设计成果4.1主要模块设计1)注册模块:clie nt.c:打注册else i-F(do_number =2) /registerint i =1 ; char username10;char password20; char password_t20; char temp20;printff请输入你的用户名:n”) scanf(%e,username);while(i)printf (请输入密码:n);

8、 scan-F( %e , password); printf(you pass : SSsXnjpassword); printf (请再次输入密码:n); scanf(jpassword_t);printf(pass you : %snpassword_t); if(strcfnp(pm5EVJ0rdFpBSEU0riM_t) != 0) -printf (,r输入的密码不一样n)ji - 1;)elsei = S; strcpy(a nameiusernane); strcpy(a.msg,password); strcpy(a.flagt reg;/a.flaB3 = 03 seind

9、(5ockfd j&a, sizeof (a) f0); printf (-正在筆待服务器应答 recvCsockfdj bufMAXLENje); printf(接到服务器发来的信息:%snbuf);server.c:394395396397398399400401402403494405406407408409410411412413414415416417418419420421422423424425426427428429430431155inrti =rag_checktai),li7if il = a)1J8 IM5trcpy(buf/注册醒戲!);14b t rcpy (i l

10、lemtNode = ri咄 Hd me);141s and (clle n tNcxIe. dtcr-juf fs trlen1-12141 1 qp144145-rcpyb叶注册耒收!144-s&nd(clientflode山匚rlbuf (strlen(buf )+13 3;d Iftitrc呻Q.fh劭昭45continue;check.c:1 /*check,*/2 #include check.h1int regchack(struct message *recievemsg)4 5 int fd;int read_size,writersize;struct message cm

11、pmsg;if(strlen(recievemsg-name)10 | strlen(recievemg-msg)20 )91011return 1j16iF(strcrflp(recievemsg- name, ,rregF )=0)17)0)2930perror(open);31print 卡(“Qpmriin“ );32return -2j33134de:3536if(read size=read(-Fdj&cmpmsg,sizeo-F(cmpmsg) 8)3738perror(read);39close(fd)4Greturn -2j4142i-F(read size ! = size

12、of(struct message) & read size I =0)43name j empmsg. name) =0)4349close(fd)50return -lj5152while(read_size = sizeof(struct message);53545556575859606163G465666768i f ( (wriite_izc=wrrt,lte ( f d j reelevms 呂sizeo-F (struct) ) )0)perrorC write1);j scanf.vsg);Strcpy(a.flag,login)j/a.flaf31 - A0*;5&nd(

13、5ock-FdJ&aJ5i?e0jF(a) ,0);printf(Hi在等後.碾务器应答一 n“打 recvfsock-Fd, buf, HAXLEN.S); printfC接到服务器发来的佶亘:%sW.buf); if(strcmp(bufM登录成功广)町/int i訂,k;标志住对应的通借协该如下 “口注1丄$111殂为给所有人发送消息.pthrejd_ ra t& (&pld f NUL L (void*) handvtnsg t (void * )&iockfd);getsfstrj; strcpyCa.fiag/aLl) j创建线程处理消息队列。1091101111121131141

14、1511611711811912121122123124125126127128129130这是消息处理函数:甘口 i H ha nd Is re c vmsg (int * WQiClc fd)int ccrinfd *5eckfd;int nrcad;char buf1024J;char str(l&24jstruct fliessdg recvmsg;tine_t tiBiep;struct tnsq msg;i*( fd - open(HchatloE.tt,*J0_RCWR|0_CREAT|0_APPEND) &)printf(-打开耽天记录文件失敗广);M;H printf(H%d

15、nH,fd);if(qld = ms gt(2222 IPC _C REAT10666) = -1)printfCiJ 且駅列失败VT); exit(l)jmsg.msgtype = getpid();5trcpy(ii5E riD5g_textJ,0K,*);Linux程序设计报告第8页,共16页111hhilti(l)133- neev(connfdjSt ec 1 zcjf(sCfuttj)j134if(nrcod - 0)155(1%”讣十叮服考爲所开:雀质.rr”1J7cl0se(onnfd);139exit(6)j140141else if trenjjreisecootlrue;

16、151152else if (5TrneKt;157strepy(a namej clientNo血 name);158whilefL !- NULL)159160send(L-data.deerj&asizeof(structmessage)j0);161L = L-next;162163164匚ontinue;16S发送给指定用户的消息处理:220else221222LinkList L;223L =亡 1 i 色 rrtlink;224L=L-next;225/sprintf (buf J1l%s:%snriJclientMode.naaeadata. name ,a. -Flag) =

17、 0)230231/send(L-data.decr,bufJ strlen(buf)+10);2321send(L-data.decr&a,sizeof(struct message)0);2331break;234-235L = L-next j236237continue*238display.c:显示发送的消息:28 intniain()2930char buf1924j31intn;32struct msq msgj33fd=open(b, chatlog. txt, O_RDONL | O_CREAT);34signal (SIGINTj handlequit);35if(fd0)

18、3637printf(打开文件夫败n”);38return -1;3940Iseekffd.SEEKEND);41if(qid = msgget(2222,IPC_CREAT|0666) = -1)4243printf(创建消息队列失败岸);44close(fd);45return -1;4&4748495051525354555G5758596061whlle(l)if(msgrcv(qidl&msgJsizecf(msg),0,8) u据琲酩蔚用户宅为口汀僧用户点迭礼聊涓咼。ltransSusertfilenamSfl1 传 Si 給 who* qult$ A q垢输入怀咒f誉夕前佶n:h

19、ello掠志信息为:1 培辅入你嗨娶輩连和侶亘: view社志信息为:mlL 产输呦強曲畫摆的佶且:ie*S咫恵管息为:view 馮辅入称啜娶蚩送切信且: rue oec & 亠 U 别;22 3U16当刖在线喜审端1 abc2 bhtk客户端一向客户端二传送文件:trans$bhck$ readlie, txt 荷志信息为:trans 谴输入你想要岌送的信息:客户端二接收文件:客户端二退出:服务器端显示退出消息:文件(F)编辑(E)查看(V)捜素 线端帮肋(H)7f319calb000-7f319d41b000 rw-p 00000000 00:00 07f319d41b000-7f3ied

20、41c000 -p 00000000 00:00 07f319d41C000-7f319delC000 rw-p 00000000 00:00 0htswdeicooo-7fswdeidooo -p oooooooo oo:oo o7f319deld000-7f319e61d000 rv-p OOOOOOOO 00:00 07f31Se01dOOO-7f319eEleOOO -p 00000000 00:00 07f319efi1e000-7f310f221000 rw-p OOOOOOOO 00:00 0stack vdsovsysca7f319f22bOOO-7f319f22fOOO rv

21、f-p 00000000 00:00 07fff6f939000-7fff6f94e000 rw-p 00000000 00:00 07fff6f9tf?000-7fffSaSOOO r-Xp 00000000 00:00 0ff fff ffiff600000-fff fff ff f f601000 r-xp 00000000 00: 00 0U己放弄(core dumped)rooWlocalhost chat3# . /server 3889正在监听中1.指定客户锻,2关闭服务器,3显示在线客户端与12卞0. 0. 1: 46504连接建立成功127, 0, 0. 1: 4G505连接

22、建立感功31. abc2. bhck1. T除指定客户谎:2.关诩服务器,3显示在线客户端 客户端bhck退岀服务器端踢出客户端一:3 rG0tlocalh0st:/home/bhck/Document5/2O131229O5/ChatRoom/chat3文件(F)编g(E) 11(V)搜黑 缪端CD群助(H)7f319eldOOO-7f3i9eSieOOO -p7f319e01eOOO-7f319f221OOO7f310f22bOOO-7f310f22fOOO7fff6f939QQ0-7ff1:6f94eQ0Q7fff6f0a7OOO-7fff6f98OOOrw- p rw-p rv-p r

23、-xp000000000000000000000000000000000000000000: 0000: 0000: 0000; 0000: 0000Q00ffffffffffeooooo-ffffffffffoiooo r-xp 00000000 00: 00 0 ll已放弃(core dumped)rooWlocalhost chats . /server 8889正在监听中,.,l.T除指定客户端,N关闭躍务器,3.显示在线客户端127.0.0. 1:46504连接確立成功与127. 0, 0. 1: 46505连接建立成功31. abc2. bhcki.m指定客户端 2.关闭服务3,3.显示在线客户端客户端bhcl(退出Stackvdso;vsysca请输入询躅出去的客户端若字: dbc3匚祁余指定客卢端2关闭服务3,3.显示在线客户端rootlocalhostjhome/b hck/Documents/2013122905/ChHEa文件(F)缩宦(E)攢索(S)缪端m釉助(H)gcc client, c -o client -Ipthread.

温馨提示

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

评论

0/150

提交评论