ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:124.74KB ,
资源ID:5726612      下载积分:10 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/5726612.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     留言反馈    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【xrp****65】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【xrp****65】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(基于嵌入式系统的聊天程序设计.docx)为本站上传会员【xrp****65】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

基于嵌入式系统的聊天程序设计.docx

1、课程设计报告书设计名称: 基于嵌入式系统的聊天程序设计 课程名称: 嵌入式系统开发 摘要随着IT技术的日益发展,嵌入式设备的功能越来越强大。 嵌入式设备决不再只是充当一个小小的个人信息管理工具了,更重要的是可以上网浏览、收发邮件,在线聊天等。然而就目前国内市场来说,并不是所有的嵌入式设备都具备以上所有的功能,即使具备,也可能由于缺乏相应的服务而不能实现。但可以预见,嵌入式设备发展的趋势和潮流就是计算、通信、网络、存储等功能的融合。目前市场上大多数的嵌入式系统都是商业化产品,价格昂贵,因此在开发过程中有必要使用一个模拟器,使得在PC上可以模拟一个嵌入式设备。在Pc机上可以方便的开发和测试程序,并

2、且可以帮助工程师快速的进行分析和改进,提高了工作效率和降低了项目的开发成本。在嵌入式操作系统的领域中,Linux以其特有的魅力得到了众多开发商的亲睐。Linux这些特性包括可以移植到多个同结构的CPU和硬件平台上,有很好的稳定性以及各种性能的升级能力。嵌入式linux在电子行业的应用很广泛,学习嵌入式linux显得非常重要。这次课程设计的主要目的是检验上学期学习linux后的效果。通过基础题的代码编写,熟悉linux C语言编程技巧。通过完成聊天程序的设计,熟悉linux底层编程。利用QT设计界面,缩短开发时间。关键字:嵌入式linux;基础题;聊天程序;QT 一、引言1二、 系统分析22.1

3、开发背景22.2聊天程序的基本需求22.3需实现的主要功能2三、需求分析33.1 QT设计33.1.1 客户端QT界面设计43.2服务器端和客户端的数据传输方式43.3 服务器端功能设计53.4客户端功能设计5四、总体设计54.1 总体功能5五、 详细设计65.1 功能分析和描述65.2 客户端功能模块65.2.1 连接服务器65.2.2发送消息功能65.2.3接收消息模块75.3 服务器功能模块8六、代码实现86.1 客户端代码86.1.1 QT构造和析构函数86.1.2 创建套接字106.1.3 创建线程116.2 服务器端代码11七、功能的实现过程13八、总结13一、引言随着IT(信息)

4、技术的飞速发展,特别是互联网的迅速普及,3C(计算机、通讯、消费电子)合一的加速,数字化时代已经来临。嵌入式系统是数字化时代的一大主流产品,世界各国在此领域开始了激烈竞争,以争取获得主导地位。嵌入式系统是数字化产品的核心。为适应嵌入式分布处理结构和应用上网需求,面向21世纪的嵌入式系统要求配备标准的一种或多种网络通信接口。针对外部联网要求,嵌入设备必需配有通信接口,相应需要TCPIP协议族软件支持;由于家用电器相互关联(如防盗报警、灯光能源控制、影视设备和信息终端交换信息)及实验现场仪器的协调工作等要求,新一代嵌入式设备还需具备IEEEl394、USB、Bluetooth或Ir DA通信接口,

5、同时也需要提供相应的通信组网协议软件和物理层驱动软件。为了支持应用软件的特定编程模式,如Web或无线Web编程模式,还需要相应的浏览器,如HTML、WML等。可以想象,如果一个体积很小的嵌入式系统能够进行在线聊天,HrrP通信,这将是会一件充满意义的事情。但是现在大多数的嵌入式系统都是商业化产品,价格昂贵。所以嵌入式系统开发前期投入比较大,开发工具投入高。为了改变这种状况,有必要设计一个模拟器,使得在PC上可以模拟一个嵌入式设备。在PC机上可以方便的开发和测试程序,并且可以帮助工程师快速的进行分析和改进,提高了工作效率和降低了项目的开发成本。随着自由软件理念日益为大众广为接受,一批自由软件在I

6、T的各个领域取得了巨大成功,Linux是其中最具代表性的一个。其自由、开放的特性吸引了大批软件厂商和独立开发人员。多年的发展和业界同仁的共同努力已使其成为高效、稳定、低成本的操作系统。而且由于Linux开放源代码,任何人都可以对其进行裁减、修改,以适应自行开发的需要。二、 系统分析2.1开发背景IRC(Intemet Relay Chat,网络中继聊天)协议用于文本交谈被设计出来已经有许多年了。IRc协议是基于客户服务器模型的,可以很好地分布式地在许多机器上运行。一个典型的设置涉及一个进程(服务器),它作为中心点接受客户(或其它服务器)的连接,并且实现要求的消息传送多元技术和其它的功能。这种分

7、布模型,由于它要求每个服务器都拥有全局状态信息,限制了一个网络所能达到的最大规模。因此是此协议最令人不能容忍的问题。现存的网络能够以难以置信的速度持续增长,我们必须感谢硬件制造商们给了我们比以往更加强大的系统。IRC协议本身就是个电话会议系统(虽然使用的是CS模式),所以非常适合分布式的多个机器上使用。一个典型的建立包括一个单一的处理器(服务器)形成一个中心节点,客户机(或其他服务器)连接这个节点去获取消息或发送,群发等功能。IRC协议已经在使用TCPIP网络协议的系统中应用了。虽然TCPIP协议并不是必须的,但是现在IRC操作仅使用在这个方面。2.2聊天程序的基本需求1、在QT(或miniG

8、UI)编写聊天程序,交叉编译后下载到目标机,可实现两台目标机可发送文本聊天。2、QT(或miniGUI)界面设计至少包括“发送”,“重置”两个按钮,要求必须把目标机的硬件键盘映射到QT设计的软件界面中,实现软件按钮的功能。2.3需实现的主要功能(1) 客户端输入服务器IP和端口号。(2) 服务器必须成功启动。(3) 每一个客户端可以寻找服务器,并且与服务器建立连接。(4) 客户端和服务器可以实现通信。(5) 通信的内容可以显示在面板上。(6) 利用QT设计界面,并下载到MagicARM2410上面。三、需求分析3.1 QT设计QT设计编写和调试阶段使用周立功MagicARM2410箱子提供的Q

9、T for PC编译器,运行测试阶段使用QT for ARM编译器。使用QT for PC阶段编译程序的步骤如下(以编译hello.cpp程序为例):(1)进入/x86-qtopia目录,运行set-env脚本,设置环境变量。$ . set-env(2)进入hello目录,然后用progen工具生成工程文件hello.pro。$ cd hello$ vi hello.cpp$ progen t app.t o hello.pro(3)使用tmake工具,生成hello工程的Makefile文件。$ tmake -o Makefile hello.pro(4)修改Makefile文件,在LIBS

10、变量中增加需要用到的库,然后输入make命令编译。LIBS = $(SUBLIBS) -L$(QTDIR)/lib -lqte -lm -lstdc+$ make(5)启动虚拟控制台,运行hello程序(主机须启动帧缓冲,必须能够访问/dev/fb0)。$ cd /zylinux/x86-qtopia$ . set-env$ cd hello$ ./hello qws如果要将Hello程序发布到MagicARM2410上运行,还需进行以下工作:(6)进入/zylinux/arm-qtopia目录,并将hello工程复制到当前目录下。$ cd /zylinux/arm-qtopia$ cp av

11、 /zylinux/x86-qtopia/hello (7)运行当前目录下的set-env文件,重新设置环境变量,进入hello目录,使用tmake工具,重新生成Makefile文件。$ . set-env$ cd hello$ tmake -o Makefile hello.pro(8)按照步骤(4)的方法修改包含库,编译,得到可执行文件hello,将hello文件添加到文件系统中,更新文件系统。(9)插入USB鼠标和USB键盘,启动MagicARM2410。启动Qtopia的终端,运行hello程序。利用同样的编译方法,客户端QT程序进行编译和调试。3.1.1 客户端QT界面设计客户端QT

12、需要以下基本组件:(1)两个QEditLine,一个用于输入服务器IP地址(可读可写),另一个用于输入服务器端口号(可读可写)。(2)三个按钮,一个用于连接服务器,另一个用于发送消息,最后一个用于清空发送区域数据。(3)四个标签,用于显示不用组件的内容。(4)两个MultiLineedit,一个用于显示通信内容(只读),一个作为发送区域(可读可写)。3.2服务器端和客户端的数据传输方式 服务器端和客户端的数据是用TCP套接字来传输的。IP地址表示Internet上的计算机,端口号标识正在计算机运行的进程。端口号与IP地址的组合得出一个网络套接字。客户端使用linux C 函数socket建立到

13、服务器的套接字连接。 当套接字连接socket建立后,可以利用linux C语言中的send函数和recv函数来实现简单的发送和接收消息。3.3 服务器端功能设计由于时间有限,服务器并没有用QT来编写界面,只是实现一个简单的控制程序。服务器主要实现有:(1)创建套接字(2)对套接字、IP地址和端口号进行绑定(3)进行监听(4)等待客户端的连接(5)对客户端接收和发送数据3.4客户端功能设计客户端使用QT设计界面,客户端实现的功能如下: (1)创建套接字 (2)连接服务器 (3)与服务器通信四、总体设计4.1 总体功能根据对需求所做的分析,聊天程序需要实现的基本功能应包括以下几个方面:(1) 客

14、户端输入服务器IP和端口号。(2) 服务器必须成功启动。(3) 每一个客户端可以寻找服务器,并且与服务器建立连接。(4) 客户端和服务器可以实现通信。(5) 通信的内容可以方便查看。 使用QT设计的界面简洁,大方,操作简单,方便,容易上手,用户可以快速掌握操作流程。五、 详细设计5.1 功能分析和描述 聊天工具包括两大功能模块:客户端和服务器端。具体实现的功能创建套接字、连接通信、接收数据显示和发送数据。5.2 客户端功能模块5.2.1 连接服务器连接服务器之前需要解析服务器地址、创建套接字、设置sockaddr_in 结构体中相关参数。5.2.2发送消息功能连接功能是开始聊天前必须进行的步骤

15、,连接成功之后,就可以进行发送消息了。发送消息功能流程图如图2-5所示: 图2-5 发送消息功能流程图5.2.3接收消息模块连接成功后,就可以接收服务器发送过来的数据。5.3 服务器功能模块 服务器的设计并没有使用QT编写界面,服务器端实现的功能有: 图2-8 服务器模块流程图六、代码实现6.1 客户端代码6.1.1 QT构造和析构函数EditDemo:EditDemo( QWidget *parent, const char *name):QWidget(parent, name)QGridLayout *grid = new QGridLayout(this, 6, 3, 0, 0);/I

16、P addrQLabel *label1 = new QLabel( IP Addr:, this);grid-addWidget( label1, 0, 0 );edit_ip = new QLineEdit(this); edit_ip-setText(127.0.0.1);grid-addWidget( edit_ip, 0, 1 );/Server PortQLabel *label2 = new QLabel( Server Port:, this);grid-addWidget( label2, 1, 0);edit_port = new QLineEdit(this); edit

17、_port-setText(4321);grid-addWidget( edit_port, 1, 1);QPushButton *btn = new QPushButton(Connect, this); /*add the connect button*/ grid-addWidget( btn, 2, 1); /*add the button*/connect(btn, SIGNAL(clicked(), this, SLOT(ButtonConnect(); /multiline input modeQLabel *label3 = new QLabel( Contract Area:

18、, this);grid-addWidget(label3, 3, 0);multiedit_contract = new QMultiLineEdit(this); multiedit_contract-setReadOnly(1);/set read only grid-addWidget(multiedit_contract,3,1); QLabel *label4 = new QLabel( Send Area:, this);grid-addWidget(label4, 4, 0);multiedit_send = new QMultiLineEdit(this); grid-add

19、Widget(multiedit_send,4,1);QPushButton *button_send = new QPushButton(Send, this); /*add the send button*/ grid-addWidget( button_send, 5, 0); connect(button_send, SIGNAL(clicked(), this, SLOT(ButtonSend(); QPushButton *button_clear = new QPushButton(Clear, this); /*add the clear button*/ grid-addWi

20、dget( button_clear, 5, 1); connect(button_clear, SIGNAL(clicked(), this, SLOT(ButtonClear(); EditDemo:EditDemo()if(socket_flag = 1)/*if create socket success*/ close(sockfd); /*Close the socket*/ printf(Close the socketn);6.1.2 创建套接字void EditDemo:CreateSocket(void)/*地址解析函数*/host = gethostbyname(edit

21、_ip-text();/*创建socket*/sockfd = socket(AF_INET,SOCK_STREAM,0);/*设置sockaddr_in 结构体中相关参数*/serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons(atoi(edit_port-text();serv_addr.sin_addr = *(struct in_addr *)host-h_addr);bzero(&(serv_addr.sin_zero), 8); 6.1.3 创建线程void *task(void *arg) int recvbytes

22、= 0; char bufBUFFER_SIZE= 0; arg = arg; while(1) if(recvbytes = recv(sockfd, buf, BUFFER_SIZE, 0) 0) multiedit_contract-append(Server said: +(QString)buf); void CreateThread(void)int result = 0;result = pthread_create(&thread1, NULL, task, (void *)0); /*Create Thread*/6.2 服务器端代码#define PORT 4321#def

23、ine BUFFER_SIZE 1024#define MAX_QUE_CONN_NM 5int main()struct sockaddr_in server_sockaddr, client_sockaddr;int sin_size, recvbytes;unsigned int sendbytes = 0;int sockfd, client_fd;char bufBUFFER_SIZE;/*建立socket连接*/sockfd = socket(AF_INET,SOCK_STREAM,0);/*设置sockaddr_in 结构体中相关参数*/server_sockaddr.sin_f

24、amily = AF_INET;server_sockaddr.sin_port = htons(PORT);server_sockaddr.sin_addr.s_addr = INADDR_ANY;bzero(&(server_sockaddr.sin_zero), 8);int i = 1;/* 使得重复使用本地地址与套接字进行绑定 */setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i);/*绑定函数bind*/ibind(sockfd, (struct sockaddr *)&server_sockaddr, sizeof

25、(struct sockaddr);/*调用listen函数*/listen(sockfd, MAX_QUE_CONN_NM);/*调用accept函数,等待客户端的连接*/client_fd = accept(sockfd, (struct sockaddr *)&client_sockaddr, &sin_size);/*调用recv函数接收客户端的请求*/ while(1) memset(buf , 0, sizeof(buf);recvbytes = recv(client_fd, buf, BUFFER_SIZE, 0); if(recvbytes 0) printf(Receive

26、d a message: %sn, buf); printf(Send a message: %sn, buf); (sendbytes = send(client_fd, buf, strlen(buf), 0); close(sockfd);exit(0);七、功能的实现过程 依照上节所设计的结构和过程,可以很方便的实现出聊天功能。下面就是一个聊天过程的执行情况。聊天的现实过程为: A:Hello B:Hello A(B): A:Bye B:Bye其中A,B是虚拟的聊天者。 在实现过程中,这个聊天过程就要借助一个服务器来实现,聊天的发送端要先跟这个服务器通信,然后由这个服务器与接收方进行通信,最后完成聊天过程。八、总结通过这次嵌入式linux程序设计和编程,对linux的编程有了更深的了解。特别是对QT编程有了很大的进步,通过测试,编写的程序都能顺利运行。由于时间紧迫,对服务器部分没有用QT来设计界面,只是编写客户端的QT程序,并成功仿真运行。16

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服