版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 基于嵌入式Linux多线程聊天系统的设计与实现学生姓名王宣达学号S20090323所在系(院)电子信息工程系专业名称电路与系统年级2009级2011年8月3日中文摘要题目基于嵌入式Linux多线程聊天系统的设计与实现摘要Linux作为一个多任务操作系统,采用了一种新的任务调度机制。原理上它将一个进程划分为多个线程,每个线程按照一定的调度策略占用CPU的运行时间及其资源,这样使得CPU的调度单元很小,从而提高了CPU并发处理能力。Socket接口是TCP/IP网络的API,可以用它们来设计TCP/IP网络上的应用程序。流式Socket(SOCK_STREAM)是一种面向连接的Socket,针对
2、于面向连接的TCP服务应用。本文首先描述了用多线程加socket网络编程的方式实现一个linux操作系统下的文本界面服务器加客户端模式的聊天程序的设计思路,然后具体阐述了实现过程上的一些重要的机制,遇到的问题,还有解决的方法。关键词:进程,多线程,互斥锁,同步,流式套接字外文摘要TitleTheDesignofEmbeddedchatSystembasedontheLinuxAbstractAsamultiplytasksoperationsystem,linuxusesanewkindofschedulingmechanism.Intheory,itdevideoneprocessintom
3、ultithread,andeverythreadusestheCPUinaccordingtoaspecialschedulingstrategy,sothatitmakestheunitverysmall,whichisscheduledbyCPU.ThisimprovedtheabilityofhandlingmultiplytasksoftheCPU.SocketinterfaceistheapplicationprogrammeinterfaceofthenetworkbasedonTCP/IPprotocol.Itcanbeusedtodesigntheapplicationpro
4、grammes.SOCK_STREAMisanconnectionorientedSocket.ItissureusedintheapplicationsbasedonTCPprotocol.ThisthesisfirstdescribedthedesignthoughtofanembeddedchatsystembasedontheLinux.Thedesignusedclientandservermodeandusedmultithreadandsocketnetworkprogrammetechnology.Finally,thisthesiselaboratethedesign,the
5、problemsandthesolution.KeywordsProcess,Multithread,Mutexlock,Synchronization,SOCK_STREAMI目录TOC o 1-5 h z HYPERLINK l bookmark8 1引言1 HYPERLINK l bookmark10 2Linux多线程聊天系统的设计思想3 HYPERLINK l bookmark12 聊天系统中服务器的设计思想3 HYPERLINK l bookmark14 聊天系统中客户端的设计思想3 HYPERLINK l bookmark16 3.Linux多线程聊天系统的实现过程5 HYPER
6、LINK l bookmark18 3.1多线程聊天系统中服务器端的实现过程5 HYPERLINK l bookmark20 多线程聊天系统中客户端的实现过程7 HYPERLINK l bookmark22 4.Linux多线程系统设计中出现的问题和解决的方法12 HYPERLINK l bookmark24 4.1多线程中资源的释放问题12 HYPERLINK l bookmark26 4.212 HYPERLINK l bookmark28 参考文献12太原科技大学(论文) 1引言在80年代中期,线程技术就应用到了操作系统中,那时在一个进程中只允许有一个线程,这样多线程就意味着多进程,虽然
7、实现了多任务,但是资源消耗还是非常可观的。而到现在,多线程技术已经被许多操作系统所支持,有Windows/NT,还有Linux。多线程和进程相比有两点优势:1.它是一种消耗资源非常少的多任务操作方式。在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种消耗非常大的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,这样创建一个线程所占用的空间远远小于创建一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。当然,随着系统的不同,这个差距也不不同。2.线
8、程间比进程间的通信机制更为便利。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便。线程则不然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。当然,数据的共享也带来其他一些问题,有的变量不能同时被两个线程所修改,这时就要用到互斥锁机制来保证线程间的同步。所以在本文的多线程聊天程序的设计中,采用多线程的方式设计系统更为适宜。其中,系统中用到的操作主要是:线程操作,设置互斥锁。其中,线程操作包括:线程创建,退出,。设置互斥锁包括:创建互斥锁,加锁和解锁。但是,要实现网络聊天,系统中还
9、要用到linux下的网络编程。Linux下的网络编程通过socket接口实现。socket是一种特殊的I/O,可以实现网络上的通信机制。Socket也是一种文件描述符。它具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。常用的Socket 太原科技大学(论文)类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务
10、应用。本文使用流式套接字,来建立服务器和客户端的通信桥梁。其中,系统用到的API有:socket,bind,listen,accept,connect系统调用,分别完成套接字的创建,绑定本地端口和本地IP形成三元的套接字,激活监听端口并创建一个请求队列,接受客户端connect连接请求,客户端发起连接请求等功能。太原科技大学(论文) 2Linux多线程聊天系统的设计思想下面是服务器和客户端的设计思想:2.1聊天系统中服务器的设计思想服务器应用程序先创建一个socket,socket就像一个文件描述符,用来引用系统分配给服务器进程的资源,并且这部分资源只能由该进程访问,对该进程是独占的。服务器通
11、过使用socket系统调用的方式创建socket,创建之后该socket不能被其它进程共享。然后,服务器进程给刚刚创建的socket绑定一个名字。本地的socket会分配一个在Linux文件系统中的文件名。对于网络socket,其名称通常是与特定网络相关的服务标识(如:端口号)以便其他客户程序连接,系统能够通过这个标识符将带有特定端口的访问请求指定给服务器进程。Socket名称的绑定是通过bind系统调用实现的。之后,服务器进程就会等待客户对该命名的socket发起链接请求。使用listen系统调用创建一个请求队列,最后使用accept系统调用接受请求。定义一个用于存放已经建立起连接的用户链表
12、,每个节点包含用户名,用户所用的套接字,还有链表指针。当Accept系统调用接受请求后就将新生成的五元套接字填充到用户的节点中,把节点加入链表,并且创建一个线程服务该用户,然后主线程循环执行accept响应下一个connect连接请求。2.2聊天系统中客户端的设计思想客户端首先获取用户输入的要连接的服务器的IP和端口号,然后用socket系统调用创建一个没有命名的socket,接着使用connect系统调用建立一个到服务器端命名的socket的连接,连接建立后,socket就像一个文件描述符一样可以进行读写操作,给建立起连接的双方提供双向通信。这里要注意的是,在与服务器通信的同时,用户也许会在
13、终端输入信息发给服务器,所以我们要同时监控socket和用户的标准输入。实现的方式是当连接建立以后使用select系统调用同时监听上面两个文件描述符,当其中一个可用的时候select返回,然后用FD_ISSET系统调用依次判断具体是哪个文件描述符可用,当键盘有数据可用时,我们将键盘输入的内容原封不动地通过socket发送给服务器;当socket可用时,我们就把socket里读到的内容显示到客户的屏幕。3.Linux多线程聊天系统的实现过程下面是聊天系统的具体实现过程,以及遇到的问题和解决的方案。3.1多线程聊天系统中服务器端的实现过程服务器主程序的主要实现代码如下:/选择通信协议为IPv4si
14、n.sin_family=AF_INET;/系统自动选择一个网卡的ip地址sin.sin_addr.s_addr=INADDR_ANY;/选择端口号sin.sin_port=htons(port);/创建监听套接字listen_fd=socket(AF_INET,SOCK_STREAM,0);intopt=1;setsockopt(listen_fd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt);/绑定端口,ip到套接字ret=bind(listen_fd,(structsockaddr*)&sin,sizeof(sin);if(retsockfd=conn
15、_fd;/填充默认名字strcpy(ptr-user_name,unknow);ptr-next=NULL;/插入链表insert(head,ptr);pthread_create(&tidi,NULL,(void*)thread,ptr);i+;下面是服务器运行起来的效果图$9Qrootwangxuanda-desktop:T桌面/多城程聊天程序文件(F)编辑(日查看(M)集端仃)帮助(H)root(awangxuanda-desktop:-/桌面/多线程聊天程序#./serveracceptingconnections3.2多线程聊天系统中客户端的实现过程服务器主程序的主要实现代码如下:/
16、屏蔽信号的干扰signal(SIGPIPE,SIG_IGN);signal(SIGCHLD,SIG_IGN);printf(Enterserverip:);fgets(ip_buf,20,stdin);*(strchr(ip_buf,n)=0;printf(Enterserverport:);fgets(port_buf,10,stdin);*(strchr(port_buf,n)=0;/把字符串转换成整型port=atoi(port_buf);bzero(&pin,sizeof(pin);pin.sin_family=AF_INET;/由于用于网络的参数是大端序列,而PC机是小端序列,所以要
17、把传递的IP包的参数转换成网络字节序inet_pton(AF_INET,ip_buf,&pin.sin_addr);pin.sin_port=htons(port);sock_fd=socket(AF_INET,SOCK_STREAM,0);rst=connect(sock_fd,(void*)&pin,sizeof(pin);if(0!=rst)perror(connect);exit(1);printf(welcometochatroom!Enterhelp!n);head.sockfd=sock_fd;while(1)fd_setrset;inttmp;FD_ZERO(&rset);/将
18、描述符head.sockfd加入到描述符集rset中FD_SET(head.sockfd,&rset);FD_SET(fileno(stdin),&rset);/用select系统调用选择可用的文件描述符,第一个参数是读或者写,或者既不可读也不可写,中文件描述符最大的+1/第二个参数是读集合,第三个是写集合,第四个是超时时间tmp=select(head.sockfdfileno(stdin)?head.sockfd:fileno(stdin)+1,&rset,NULL,NULL,NULL);if(tmp=-1)perror(select);continue;if(FD_ISSET(filen
19、o(stdin),&rset)&if(fgets(buff,sizeof(buff),stdin)=NULL)ferror(stdin)perror(fgets);elsesend(head.sockfd,buff,strlen(buff),0);if(FD_ISSET(head.sockfd,&rset)/memset(buff,0,sizeof(buff);intn=read(head.sockfd,buff,MAX);if(n=0)perror(closed);太原科技大学(论文)exit(0);elsewrite(fileno(stdout),buff,n);以下是客户端程序运行过程:
20、1.输入服务器的IP和服务器端口进入聊天程序命令行界面(因为演示时是用一台机器做服务器又做客户端,所以IP为本地回环)29Grootwangxuanda-desktop:面/護址覆聊夭荐萍文件(F)蝙辑(日查看(V)终探仃)帮助(H)root(awangxuanda-desktop:-/面/多线程聊天程序#./clientEnterserverip:Enterserverport:B089welcometochatroom!Enterhelp!以下是命令格式,请输入命令幵蛤聊天:注意:注册后才可以登录.REGIST:username:passwdLOGIN:
21、username:passwdRECORDSHOW启LL:*TO:username:*登录后才可臥聊天注册登录显示聊天记录显示所育在线的用户群聊私聊2.注册在虚拟终端pts/1上注册一个用户叫下是命令格式,请输入命令幵始聊天:注意:注册后才可M登录.登录后才可M聊天REGIST:username:passwd注册LOGIN:username:passwd登录R在Pt1户三亍m三在pts/上注册力个用1户亍H.二=ALL:*群聊TO:username:*私聊REGIST:wangxuanda:123455reqistsucsess!太原科技大学(论文) 惋下是命令格式.请输入命令开始聊天:主意:
22、注册后才可叹登录.登录后才可臥聊天LEGIST:username:passwd注册_OGIN:username:passwd登录RECORD显示聊天记录州DW显示所有在线的用户ILL:*群聊ro:username:*私聊EGIST:haoyongxin:123456_egistsucsess!|3.登陆且下是命令格式,请输入命令开始聊天:注意:注册后才可臥登录.登录后才可以聊天注册登录显示聊天记录显示所有在坡的用户群聊私聊REGIST:username:passwdLOGIN:username:passwdRECORDSHOWALL:*TO:username:*LOGIN:haoyongxin
23、:123456loginsucsess!welcome!haoyongxin:loginchatingroom!且下是命令槁式,请输入命令幵始聊天:注意:注册后才可M登录.登录后才可M聊天REGIST:username:passwd注册LOGIN:username:passwd登录RECORD显示聊天记录SHOW显示所有在线的用户梵LL:*群聊TO:username:*私聊LOGIN:wangxuanda:123456loginsucsesslwelcome!wangxuanda:loginchatingroom!4.显示在线用户下是命令槁式.请输入命令幵始聊天:注意:注册后才可叹宜录.宜录后才可叹聊天LEGIST:username:passwd注册LOGIN:username:passwd登录RECORD显示聊天记录SHOW显示所有在塢的用户%LL:字#字#字#群聊TO:username:*haoyongxin:loginchatingroom!SHOWJadminhaoyongxinwangxuanda私聊用户Haoyongxin端:规下是命令格式请输入命令开始聊天:注意:注册后才可臥登录REGIST:username:passwdL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 艺术展览设计师的空间布局与艺术呈现
- 年产100万套转椅配件及15万套成品生产线项目可行性研究报告模板-立项拿地
- 2025年全球及中国自锁平头螺母行业头部企业市场占有率及排名调研报告
- 2025-2030全球自由式风帆板行业调研及趋势分析报告
- 2025-2030全球钙钛矿太阳光模拟器行业调研及趋势分析报告
- 2025-2030全球生命科学服务行业调研及趋势分析报告
- 2025-2030全球无人机测绘系统行业调研及趋势分析报告
- 2025年全球及中国碳捕获与利用技术行业头部企业市场占有率及排名调研报告
- 2025-2030全球汽车空调电机行业调研及趋势分析报告
- 2025年全球及中国家用前置过滤器行业头部企业市场占有率及排名调研报告
- 二零二五版电力设施维修保养合同协议3篇
- 最经典净水厂施工组织设计
- VDA6.3过程审核报告
- 2024-2030年中国并购基金行业发展前景预测及投资策略研究报告
- 2024年湖南商务职业技术学院单招职业适应性测试题库带答案
- 骨科手术中常被忽略的操作课件
- 《湖南师范大学》课件
- 2024年全国各地中考试题分类汇编:作文题目
- 2024年高压电工操作证考试复习题库及答案(共三套)
- 《糖拌西红柿 》 教案()
- 弹性力学数值方法:解析法:弹性力学中的变分原理
评论
0/150
提交评论