ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:254.50KB ,
资源ID:6290558      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

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

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于QT的TCP socket通信编程论文.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于QT的TCP socket通信编程论文.docx

1、基于QT的TCP socket通信编程论文 嵌入式系统应用 大作业设计文档题目:基于QT的TCP socket通信程序 课 程 名: 嵌入式系统应用 院 系: 专业班级: 通信工程 学 号: 学生姓名: 2009 年 12 月 24日 目录1、QT简介 32、需求分析 42.1功能: 42.2 设计要求: 43、概要设计 44、详细设计 54.1 TCP socket 通信工作原理 54.2 猜字游戏的功能说明 64.3 猜字游戏的实现 64.4 猜字游戏服务器端的交叉编译 105、调试分析 126、测试结果 137、参考文献 131、QT简介Qt是诺基亚开发的一个跨平台的C+图形用户界面应用

2、程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程。Qt是一个跨平台的C+图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程。 自从1996年早些时候,Qt进入商业领域,它已经成为全世界范围内数千种成功的应用程序的基础。Qt也是流行的Linux桌面环境KDE 的基础,KDE是所有主要的Linux发行版的一个标准组件。 Qt支持下述平台: MS/Windows - 95、98、NT 4.0、ME、2000、XP 和 Vista

3、 Unix/X11 - Linux、Sun Solaris、HP-UX、Compaq Tru64 UNIX、IBM AIX、SGI IRIX和其它很多X11平台 Macintosh - Mac OS X Embedded - 有帧缓冲(framebuffer)支持的Linux平台,Windows CE。 Qt是诺基亚公司的一个产品。 Qt 的良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常 方便的。 Qt 提供了一种称为 signals/slots 的安全类型来替代 callback,这使得各个元件 之间的协同工作变得十分简单。 3. 丰富的 API Qt 包括

4、多达 250 个以上的 C+ 类,还提供基于模板的 collections, serialization, file, I/O device, directory management, date/time 类。甚至还包括正则表达式的处理 功能。Qt被按不同的版本发行: Q商业版 提供给商业软件开发。它们提供传统商业软件发行版并且提供免费升级和技术支持服务。如果要获得最新信息,请浏览诺基亚公司Qt Software网站页面,或者与sales联系。商业版多一些扩展模块。 Qt开源版是Qt仅仅为了开发自由和开放源码软件 提供的Unix/X11版本。在Q公共许可证和GNU通用公共许可证下,它是免费的

5、。最新的版本可以在这里下载。 从计划于2009年3月发布的Qt 4.5 起,诺基亚将为Qt增添新的开源LGPL授权选择。 Qt/嵌入式开源版是Qt为了开发自由软件提供的嵌入式版本。在GNU通用公共许可证下,它是免费的。Qt文件格式 Apple公司开发的一种音频、视频文件格式,用于保存音频和视频信息,具有先进的音频和视频功能,由包括Apple Mac OS,Microsoft Windows 95/98/NT在内的所有主流计算机操作系统支持。是MAC常用播放软件Quicktime的主要视频格式之一(其他的还有MOV等),Qt文件格式支持25 位彩色,支持RLC、JPEG等领先的集成压缩技术,提供

6、150多种视频效果。2、需求分析2.1功能:该设计主要实现基于TCP的socket编程的猜字游戏,分服务器和客户端,服务端监听客户端的连接,当客户端连接上服务器时,通过给服务器发送数字来与服务器实现通信。当客户端发送一个数字给服务器时,服务器进行处理。2.2 设计要求:程序设计对于客户端的输入值有严格的要求,输入形式为数字,输入值的范围取在0到9之间,当输入值超出这个范围时,提示出错,并不给予处理。根据客户端的输入,程序判断输入值,然后给予:正确、出错、请输入的处理。服务器从网络读取输入数据,并与事先随机生成的数字比较,相等则提示正确,反之,则提示错误,并把正确的数字发送到客户端显示出来。3、

7、概要设计【1】 TCP 客户端的工作流程:(1)创建TCP套接口。客户端也是通过调用socket()函数来创建套接口。(2)指定服务器IP地址和端口(3)建立与服务器的链接。通过调用connect()函数与服务器取得链接。connect函数原型为:#include #include int connect(int sockfd,const struct sockadd *servaddr, socklen_t *addrlen); (4)读入并输出服务器的应答(5)终止程序【2】 TCP 服务器的工作流程:(1)创建TCP套接口。客户端也是通过调用socket()函数来创建套接口。(2)通过b

8、ind函数把socket的与主机的信息进行绑定。(3)通过listen的函数监听客户端的连接。(3)通过accept接受客户端的连接。(4)读入并输出服务器的应答。(5)终止程序。服务器与客户端建立连接后,服务器创建一个ClientSocket来处理请求, 4、详细设计4.1 TCP socket 通信工作原理 客户端:(1)创建TCP套接口。客户端也是通过调用socket()函数来创建套接口。(2)指定服务器IP地址和端口(3)建立与服务器的链接。通过调用connect()函数与服务器取得链接。 (4)读入并输出服务器的应答(5)终止程序服务器:(1)创建TCP套接口。客户端也是通过调用so

9、cket()函数来创建套接口。(2)通过bind函数把socket的与主机的信息进行绑定。(3)通过listen的函数监听客户端的连接。(3)通过accept接受客户端的连接。(4)读入并输出服务器的应答。(5)终止程序。4.2 猜字游戏的功能说明实现以下功能:(1)客户端程序从标准输入,从键盘读入一个数字并发送给服务器。(2) 服务器从网络输入,读取该数并把它与事先随机生成的数字相比较,若相等,则提示用户猜对了;否则,提示错误并把正确数字发送给客户显示出来。4.3 猜字游戏的实现(1)TCP客户端实现Client: connect(send, SIGNAL(clicked(),SLOT(se

10、ndToServer() ); connect(close, SIGNAL(clicked(),SLOT(closeConnection() ); connect(quit, SIGNAL(clicked(), qApp, SLOT(quit() ); connect(Connect, SIGNAL(clicked(),SLOT(connectToServer() );/create the socket and connect various of its signals socket = new QSocket(this); connect(socket, SIGNAL(connected

11、(),SLOT(socketConnected() ); connect(socket, SIGNAL(connectionClosed(),SLOT(socketConnectionClosed() ); connect(socket, SIGNAL(readyRead(),SLOT(socketReadyRead() ); connect(socket, SIGNAL(error(int),SLOT(socketError(int) ); QVBoxLayout *l = new QVBoxLayout(this); l-addWidget(infoText, 10); l-addWidg

12、et(hb, 1); l-addWidget(addrBox, 1); l-addWidget(buttonBox, 1);/ l-addWidget(Connect, 1);/ l-addWidget(close, 1);/ l-addWidget(quit, 1);/connect to the server infoText-append(tr(Tying to connect to the server);/ socket-connectToHost(host, port);void QClient:closeConnection() socket-close(); if (QSock

13、et:Closing = socket-state() connect(socket, SIGNAL(delayedCloseFinished(),SLOT(socketClosed(); else socketClosed(); void QClient:sendToServer()/ write to the server if (QSocket:Connected = socket-state() QTextStream os(socket); os text() setText(); else / The socket is unconnected infoText-append(tr

14、(The server is lostn);void QClient:connectToServer() socket-connectToHost(addrText-text(), 8034);void QClient:socketReadyRead()/ read from the server while (socket-canReadLine() infoText-append(socket-readLine(); void QClient:socketConnected() infoText-append(tr(Connected to servern);void QClient:so

15、cketConnectionClosed() infoText-append(tr(Connection closed by the servern);void QClient:socketClosed() infoText-append(tr(Connection closedn);void QClient:socketError(int e) if (e = QSocket:ErrConnectionRefused) infoText-append(tr(Connection Refusedn); else if (e = QSocket:ErrHostNotFound) infoText

16、-append(tr(Host Not Foundn); else if (e = QSocket:ErrSocketRead) infoText-append(tr(Socket Read Errorn); (2)TCP服务器实现Server:class ClientSocket : public QSocket Q_OBJECTpublic: ClientSocket( int sock, QObject *parent=0, const char *name=0 ) : QSocket( parent, name ) line = 0; connect( this, SIGNAL(rea

17、dyRead(), SLOT(readClient() ); connect( this, SIGNAL(connectionClosed(), SLOT(connectionClosed() ); setSocket( sock ); ClientSocket() private slots: void readClient() while ( canReadLine() ) QTextStream os( this); randomNUM = random() % 10; clientNumber = atoi(readLine(); if(clientNumber9) osline: P

18、lease input a number.; else if(clientNumber=randomNUM) oslinej: Good,you are right.n; else osline: sorry,the right number is randomNUMsetAlignment( AlignHCenter ); infoText = new QTextView( this ); QPushButton *quit = new QPushButton( Quit , this ); connect( server, SIGNAL(newConnect(), SLOT(newConn

19、ect() ); connect( quit, SIGNAL(clicked(), qApp, SLOT(quit() ); ServerInfo() private slots: void newConnect() infoText-append( New connectionn );4.4 猜字游戏服务器端的交叉编译在编译基于ARM 开发板的Qt 应用程序时,请检查qt_toolchain工具链是否已经安装到/opt/xscalev1/arm-linux或/usr/local/arm-linux目录下。如果没有安装。则从教学服务器下复制arm-linux-toolchain.tar.gz压

20、缩包到虚拟机的/opt/xscalev1或/usr/local目录下解压缩。然后写一个脚本文件(qt_configure)来配置一个编译环境,脚本文件内容如下:export QTDIR=/opt/xscalev1/arm-linux/qt_toolchain/qt-2.3.7export QPEDIR=/opt/xscalev1/arm-linux/qt_toolchain /qtopia-free-1.7.0export LD_LIBRARY_PATH=/opt/xscalev1/arm-linux/qt_toolchain /qt-2.3.7/lib:$LD_LIBRARY_PATHexp

21、ort LD_LIBRARY_PATH=/opt/xscalev1/arm-linux/qt_toolchain /qt-2.3.2/lib:$LD_LIBRARY_PATHexport TMAKEDIR=/opt/xscalev1/arm-linux/qt_toolchain/tmake-1.11export TMAKEPATH=/opt/xscalev1/arm-linux/qt_toolchain /tmake-1.11/lib/qws/linux-arm-g+export PATH=/opt/xscalev1/arm-linux/qt_toolchain /tmake-1.11/bin

22、:$PATH用如下的命令激活脚本配置。rootlocalhost Socket$source qt_configure 或rootlocalhost Socket. qt_configure 由于qtopia-free-1.7.0包存在bug(编译含textedit等组件的程序出错),所以如果用到该组件时请将/opt/xscalev1/arm-linux/qt_toolchain/qtopia-1.7.0/src/applications/textedit/qtextedit.h文件复制到/opt/xscalev1/arm-linux/qt_toolchain/qtopia-1.7.0/inc

23、lude目录下。这样仅保证编译成功且可以运行,但textedit组件的功能并没有实现!基于系统中文支持有限的原因,在用QT设计器设计程序界面时不要使用中文。否则编译时会发生一些错误;另外,目标板上支持的中文字体也较少。由于嵌入式平台中无法对ui 界面文件进行编译,除了将ui 界面文件转换为标准的C+文件之外,还要对利用Qt 集成开发平台生成的工程文件进行修改,否则无法编译,Qt 集成开发平台生成的原始工程文件Socket.pro 内容为:SOURCES += main.cpp Socket.cppHEADERS += Socket.hunix UI_DIR = .uiMOC_DIR = .mo

24、cOBJECTS_DIR = .objTEMPLATE =appCONFIG += qt warn_on releaseLANGUAGE = C+修改后的工程文件内容为(黑体部分为新增内容,用于支持qtopia):SOURCES += main.cpp Socket.cppHEADERS += Socket.hTEMPLATE =appCONFIG += qtopia qt warn_on releaseLANGUAGE = C+工程文件修改后,然后利用tmake 工具生成用于编译应用程序的Makefile 文件。rootlocalhost Socket$tmake o Makefile So

25、cket.pro用文本编辑器打开Makefile文件,在LIBS项的最后加上 lts;例如:LIBS=$(SUBLIBS) L$(QPEDIR)/lib L$(QTDIR)/lib lm lqpe lqtopia lqte -ltsrootlocalhost Socket$make编译后,可用file 命令查看编译的应用程序格式,如图6-7 所示图6-7 基于ARM 的Qt 应用程序编译界面5、调试分析1. 在本次大作业设计实现的过程中遇到了很多问题,首先由于个人c+语言不强,对C+编程不熟悉,导致在开发过程中遇到了很大的困难。2. 其次,在之前的交叉编译环境搭建的实验中,有些方法方式掌握不够,导致在这次设计的交叉编译过程中,遇到一些问题3. 当然,虽然可能最后自己没有完全凭自己的个人能力实现TCP Socket猜字游戏,但这次的程序设计也让我更加深刻的接触到QT的TCP,SOCKET 编程6、测试结果7、参考文献【3】 魏红兴 嵌入式系统设计 清华大学出版社【4】 郭春柱 嵌入式系统设计案例导学 西安电子科技大学出版社【5】 郑灵翔,北京航空航天大学出版社,2008:【6】 李善平、郑扣根,Linux内核分析和实验教程,机械工业出版社,1999

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1