欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    网络聊天程序设计(Linux版)(共21页).docx

    • 资源ID:13449844       资源大小:171.58KB        全文页数:21页
    • 资源格式: DOCX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    网络聊天程序设计(Linux版)(共21页).docx

    精选优质文档-倾情为你奉上江西理工大学应用科学学院嵌入式系统开发技术课程设计专 业: 电子信息工程 班 级: 电信131班 学 号: 姓 名: 张越 陈成 设计题目:网络聊天程序的设计 2016年11月专心-专注-专业课程设计评分表姓 名张越 陈成班 级电信131班学 号课设题目网络聊天程序的设计指导教师曾璐评分项目满分分值得分设计文档(30分)文档格式封面2页面布局4目录格式3图表质量2页眉页脚2文档内容内容完整性6内容逻辑性5内容正确性6程序代码(30分)程序功能15编程规范7编程文档8答辩(20分)课题陈述7问题答辩10是否超时3考勤(20分)20总评成绩指导教师评语签名: 年 月 日教研室意见签名: 年 月 日目 录1. 系统概述Linux是一种针对PC计算机和工作站得操作系统。他具有像Windows和Mac那样的功能齐全的图形用户界面。由于Linux的开源的特点,越来越多的人转而使用Linux作为PC机得操作系统。网络聊天程序是目前应用极为广泛的一种网络软件,对于方便人们的交流沟通非常有效,同时,作为一种典型的网络应用,编写网络聊天程序是学习基于Linux的网络编程的有效方法。本次课题设计是在使用Linux线程和Socket接口的基础上,编写网络聊天程序,从而掌握Linux应用程序开发的基本方法,练习Linux线程及Socket编程的方法,从而将所学知识融会贯通。2. 需求分析2.1 功能需求本次课程设计需要完成以下功能:(1) 实现在服务器的控制下,完成多人聊天,采用单机多终端模拟方式。(2) 在服务器端,使用多线程机制,为多个用户服务。(3) 服务器能够对要求接入的客户端进行身份识别,完成聊天数据的转发,并能够将不同用户聊天记录存档。2.2 性能需求(1) 可靠性高,能在由于系统问题或其它原因产生错误后,作出相对应处理,比如网络初始化失败、服务器不在线等,可以提示用户安全退出本程序,在出现不可知的错误以后,可以尽量安全的退出程序。(2) 模块化设计此软件的功能,不同的模块实现不同的功能,使得软件易于以后的维护与扩展,在以后可以更好的完善本软件的功能,更方便于在工作中的应用。(3) 宜操作性,程序简单易懂,容易上手使用。2.3运行环境要求本项目开发主要完成软件开发可在Linux和windows平台下开发3. 系统设计3.1 系统总体流程图图1 系统设计流程图4. 调试及测试4.1调试结果1,启动SSH Secure Shell软件后,将程序进行编译:图6 编译程序,2,编译成功后,将服务器打开:图7 打开服务器3,打开服务器以后,需输入用户名称,即可进入聊天室进行聊天:图8 准备进行聊天4,用户进行聊天:图9 用户聊天界面a图10 用户聊天界面b4.2 调试结果分析这是一个聊天室程序,可以实现群聊的功能,即当某个客户发出消息后,服务器和其他个客户端都能收到此消息。且能够显示客户端的用户名。但客户端退出聊天室后,服务器和其他在线客户端会有提示。实现群聊的机制是:当某个客户端需要发送消息是,它将此消息发送给服务器,服务器再将此消息转发给各客户端,各客户端之间是无连接的,即相互之间不能直接通信。因此,在服务器中,有两个线程,主线程用来监听是否有客户端登录服务器,若有,建立与其连接的套接字,并存入在线客户序列里,辅助线程是接收转发线程,其依次读取个客户端,看是否有消息送达,若有,取出,并转发给各其他客户端。在客户端也有两个线程,主线程用来向服务器发送消息,辅助线程用来接收服务器发出的消息。5. 设计总结转眼间为期一周的嵌入式系统开发课程设计转眼就结束了,这次课程设计,我学会了许多课本上学不到的东西,同时也加强了我的动手、思考和解决问题的能力以及学会了相互帮助,相互团结的团队精神,受益匪浅。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。感谢谢老师的悉心教导和认真帮助,在我们遇到各种困难时给予我们最深刻的指导,让我们能够较顺利的完成此次课程设计。本次课程设计有张越,陈成集体完成。6.参考文献1 Bruce Molay. Unix/Linux编程实践教程. 北京:清华大学出版社,2011 2 金钟夫,杜刚.浅析socket网络编程J. 微计算机信息,2002,3-2,87-89 3 张饶学,Linux网络编程M.北京:清华大学出版社,2000 4 赵敏哲,64位Linux操作系统与应用实例M. 北京:机械工业出版社,20015 华清远见嵌入式培训中心编著 嵌入式Linux应用程序开发(第二版)人民邮电出版社 2011年7月6 谢小云编著嵌入式系统综合项目江西理工大学应用科学学院出版社,2011年7 王天苗,魏洪兴编著嵌入式系统设计与实例开发(第三看版)清华大学出版社,2007年附录/* 客户端程序 client.c */#include <stdlib.h>#include <stdio.h>#include <errno.h>#include <string.h>#include <netdb.h>#include<unistd.h>#include <pthread.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#define TRUE 1#define PORT 5000 static int sockfd;void recvfromserver( ) /接受服务器消息线程入口函数char mes1024;int nbytes=0;while( 1 ) memset(mes,0,sizeof(mes);nbytes=read(sockfd,mes,sizeof(mes);if(nbytes>0)mesnbytes='0'printf("%sn",mes);pthread_exit(NULL);int main(int argc, char *argv)char buffer1024;struct sockaddr_in server_addr;struct hostent *host;int portnumber,nbytes;char strhost16;char clientname20;char mes1024;int thr_id; /* thread ID for the newly created thread */pthread_t p_thread; /* thread's structure */if(argc!=1)fprintf(stderr,"Usage:%s an",argv0);exit(1);Printf ("请输入服务器ip地址n");scanf("%s",strhost);if(host=gethostbyname(strhost)=NULL)fprintf(stderr,"Gethostname errorn");exit(1); /* 客户程序开始建立 sockfd 描述符 */printf ("正在建立套接口.n");if(sockfd=socket(AF_INET,SOCK_STREAM,0)=-1)fprintf(stderr,"Socket Error:%san",strerror(errno);exit(1); /* 客户程序填充服务端的资料 */bzero(&server_addr,sizeof(server_addr);server_addr.sin_family=AF_INET;server_addr.sin_port=htons(PORT);server_addr.sin_addr=*(struct in_addr *)host->h_addr);printf ("套接口创建成功,正在链接服务器.n"); /* 客户程序发起连接请求 */if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr)=-1)fprintf(stderr,"Connect Error:%san",strerror(errno);exit(1); /* 连接成功了 */Printf ("链接服务器成功n欢迎来到聊天室n");Printf ("请输入你的用户昵称n");scanf("%s",clientname);Printf ("nn开始聊天吧("Quit"断开连接)nn");thr_id = pthread_create(&p_thread, NULL,(void*) recvfromserver, NULL);while(1)memset(buffer,0,sizeof(buffer);memset(mes,0,sizeof(mes);scanf("%s",buffer);strcat(mes,clientname);strcat(mes,":");strcat(mes,buffer);if(write(sockfd,mes,sizeof(mes)=-1)fprintf(stderr,"Write Error:%sn",strerror(errno);exit(1);if(strcmp(buffer,"Quit")=0)break; /* 结束通讯 */close(sockfd);exit(0);/* 服务器程序 (server.c) */#include <stdlib.h>#include <stdio.h>#include <errno.h>#include <string.h>#include <netdb.h>#include<unistd.h>#incliude<pthread.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#define MAXLINE 1000 /在一条消息中最大的输出字符数#define LISTENQ 20 /最大监听队列#define PORT 5000 /监听端口#define MAXFD 20 /最大的在线用户数量void *get_client(void *); int sockfd,i;static int maxi=0;/maxi表示当前client数组中最大的用户的i值static int clientMAXFD;void recvandsend(void) /监听转发线程入口函数int index=0;int nbytes=0;char buffer1024;int len;int outindex=0;while(1)if(maxi>0)memset(buffer,0,sizeof(buffer);nbytes=0;/index+;nbytes=read(clientindex+,buffer,sizeof(buffer);if(nbytes>0)buffernbytes='0'printf(" %sn",buffer);outindex=0;while(outindex<maxi)if(write(clientoutindex+,buffer,sizeof(buffer)=-1)fprintf(stderr,"Write Error:%sn",strerror(errno);exit(1);if(index>=maxi)index=0;pthread_exit(NULL);int main(int argc, char *argv)struct sockaddr_in server_addr;struct sockaddr_in client_addr;int sin_size,portnumber;char hello="Hello! Are You Fine?n"int thr_id; /* thread ID for the newly created thread */pthread_t p_thread; /* thread's structure */int new_fd=0;memset(client,0,sizeof(client);if(argc!=1)fprintf(stderr,"Usage:%s portnumberan",argv0);exit(1); /* 服务器端开始建立 socket 描述符 */if(sockfd=socket(AF_INET,SOCK_STREAM,0)=-1)fprintf(stderr,"Socket error:%sna",strerror(errno);exit(1); /* 服务器端填充 sockaddr 结构 */bzero(&server_addr,sizeof(struct sockaddr_in);server_addr.sin_family=AF_INET;server_addr.sin_addr.s_addr=htonl(INADDR_ANY);server_addr.sin_port=htons(PORT); /* 捆绑 sockfd 描述符 */if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr)=-1)fprintf(stderr,"Bind error:%sna",strerror(errno);exit(1);printf("服务器监听端口%d.n",PORT);/* 监听 sockfd 描述符 */if(listen(sockfd,LISTENQ)=-1)fprintf(stderr,"Listen error:%sna",strerror(errno);exit(1);thr_id = pthread_create(&p_thread, NULL,(void*) recvandsend, NULL);printf("欢迎来到本聊天室n");while(1)/* 服务器阻塞,直到客户程序建立连接 */if(maxi>=20)printf("以达到人数上线n");continue;sin_size=sizeof(struct sockaddr_in);if(new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size)=-1)fprintf(stderr,"Accept error:%sna",strerror(errno);exit(1);clientmaxi+=new_fd;printf("n新用户进入聊天室%dn",new_fd);close(sockfd);exit(0);

    注意事项

    本文(网络聊天程序设计(Linux版)(共21页).docx)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开