基于Linux平台的聊天软件的设计与研究毕业设计论文Word下载.docx
《基于Linux平台的聊天软件的设计与研究毕业设计论文Word下载.docx》由会员分享,可在线阅读,更多相关《基于Linux平台的聊天软件的设计与研究毕业设计论文Word下载.docx(55页珍藏版)》请在冰豆网上搜索。
本人完全意识到本声明的法律后果由本人承担。
日期:
年月日
学位论文版权使用授权书
本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
导师签名:
日期:
注意事项
1.设计(论文)的内容包括:
1)封面(按教务处制定的标准封面格式制作)
2)原创性声明
3)中文摘要(300字左右)、关键词
4)外文摘要、关键词
5)目次页(附件不统一编入)
6)论文主体部分:
引言(或绪论)、正文、结论
7)参考文献
8)致谢
9)附录(对论文支持必要时)
2.论文字数要求:
理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。
3.附件包括:
任务书、开题报告、外文译文、译文原文(复印件)。
4.文字、图表要求:
1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写
2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范。
图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画
3)毕业论文须用A4单面打印,论文50页以上的双面打印
4)图表应绘制于无格子的页面上
5)软件工程类课题应有程序清单,并提供电子文档
5.装订顺序
1)设计(论文)
2)附件:
按照任务书、开题报告、外文译文、译文原文(复印件)次序装订
指导教师评阅书
指导教师评价:
一、撰写(设计)过程
1、学生在论文(设计)过程中的治学态度、工作精神
□优□良□中□及格□不及格
2、学生掌握专业知识、技能的扎实程度
3、学生综合运用所学知识和专业技能分析和解决问题的能力
4、研究方法的科学性;
技术线路的可行性;
设计方案的合理性
5、完成毕业论文(设计)期间的出勤情况
二、论文(设计)质量
1、论文(设计)的整体结构是否符合撰写规范?
2、是否完成指定的论文(设计)任务(包括装订及附件)?
三、论文(设计)水平
1、论文(设计)的理论意义或对解决实际问题的指导意义
2、论文的观念是否有新意?
设计是否有创意?
3、论文(设计说明书)所体现的整体水平
建议成绩:
(在所选等级前的□内画“√”)
指导教师:
(签名)单位:
(盖章)
年月日
评阅教师评阅书
评阅教师评价:
一、论文(设计)质量
二、论文(设计)水平
评阅教师:
教研室(或答辩小组)及教学系意见
教研室(或答辩小组)评价:
一、答辩过程
1、毕业论文(设计)的基本要点和见解的叙述情况
2、对答辩问题的反应、理解、表达情况
3、学生答辩过程中的精神状态
评定成绩:
教研室主任(或答辩小组组长):
(签名)
教学系意见:
系主任:
DesignandimplementationasoftwarewhichcancommunicateonLinux
ADissertationSubmittedto
NanjingInstituteofTechnology
FortheAcademicDegreeofBachelorofScience
By
DeZhouZhang
Supervisedby
LecturerLeiTang
CollegeofCommunicationEngineering
June2015
摘要
Linuxkernel由于其代码的开源及获取方便等优点,越来越受到广大技术人员的青睐。
Linux系统提供了完整的内核源代码,在此代码的基础上可以进行自定义,从而打造属于自己的“专属”系统。
Socket通讯使用C/S模型,Socket上TCP/IP网络应用程序接口(API),提供了很多函数方开发人员利用。
Socket通讯有两种传输协议:
TCP协议和UDP协议,TCP协议是面向连接的,传输可靠的;
UDP是无连接的,传输不可靠的,因此本设计中选用TCP。
进程和线程是不同的,进程拥有自身的程序映像和地址空间,是内核调度的基本单元,每个单独的进程都有自己的代码段、数据段以及堆栈,它们使用自己的虚拟地址空间,多个进程间互不影响。
而线程没有自己独立的地址空间,创建出来的新线程和创建它的进程共享一个虚拟地址空间。
这些知识点将在论文中详细介绍。
本设计主要对服务端和客户端程序进行编写并对其进行调试,从而实现客户端和服务端之间的通信。
总的来讲,本设计使用C语言开发,通过Socket建立连接,并创建多个线程的实现多任务。
关键词:
Linux内核;
socket;
进程;
线程;
多任务
Abstract
Becauseofmeritinopeningofsourcecodeandgettingconvenient,linuxkernelbecomemoreandmorepopularamongtheprogrammers.LinuxprovidesintegratedsourcecodeofLinux-kernel,peoplecanmakespecialsystembelongstothemselvesbasedonthesourcecode.
SocketcommunicationuseC/Smodel,andtheAPIofTCP/IPonitprovidesplentyoffunctionsforprogrammerstouse.Socketcommunicationhastwotransferprotocols:
TCPandUDP;
TCPisconnectionandreliable,butUDPisconnectionlessandunreliable.So,wechooseTCPinthisdesign.
Processisdifferentfromthread.Processhasitproceduremapandaddressspace,it‘sbasicunitofthekernelscheduling,eachsingleprocesshasitsowntext、dataandstack,theyusetheirsvirtualaddressspaceanddon’taffecteachother.Butthreaddoesn’thaveindependentaddressspace,itsharesthevirtualaddressspacewiththeprocesswhocreatesit.Thisknowledgewillbeintroducedinmythesis.
Thisdesignrealizescommunicationbetweenclientandserverbydebugginginclientandserver’scode.Ingeneral,thisdesignusesClanguage,connectsbysocketandcreatesmultiplethreadstoimplementmultitasking.
Keywords:
Linux-kernel;
socket;
process;
thread;
multitask
第一章绪论
1.1设计背景
Linux是兼容POSIX的U-like操作系统,大多数重要的UNIX工具、应用程序和网络协议都能在其上运行。
Linux系统目前已经得到了很广泛的应用。
它是由芬兰人LinuxTorvalds开发的。
Linux最初是为intel_x86平台开发的免费操作系统,从那时开始Linux就被陆续移植到其他硬件工作平台。
在服务器方面Linux操作系统一直处于领先地位,比如大型机和超级计算机,但在桌面用户市场只占到了1.5%。
Linux也可以运行在嵌入式设备之中,这些设备主要包括移动电话、平板电脑、网络路由、自动控制设备和电视机等等。
Android是Linux操作系统在平板和智能电话中用的最为广泛的一款操作系统构建与LinuxKernel上层。
基于代码开源的优势,linux具有强大市场竞争力。
只要想获得源码,便可从官方网站上获取LinuxKernel源代码,有了源代码之后就可以自定义操作系统了。
在此基础上安装自己的应用软件,至此一个完整的属于自己的操作系统就诞生了。
通常将这样安装所获得的系统称为Linux系统,这是因为它包含的不止一个内核。
提及Linux,那就得提到GNU和Unix。
1983年9月27号,RichardStallman希望开发一套完整的开放源码操作系统以取代Unix,从而诞生了GNU。
1985年,发表GNU宣言;
1989年,发表GNU(GNUGneralPublicLicense,GPL);
GPL的开源思想使得我们的学习之路顺畅了许多。
GPL保障了Linux不仅仅是当下自由可用,而且今后经过任何修改后还是自由可用的,这点充分体现了Stallman的初衷。
Unix是于1969年在美国AT&
T公司贝尔实验室开发出来的具有多任务,多用户的操作系统。
Unix的前身叫做Multics,由BELLLabs参与研发,可是由于进度缓慢,BellLabs不得不放弃了这个计划。
在这之后就由贝尔实验室的职员Kenthompson,DennisRitchie等继续自行开发。
在此之后的10年里,Unix在大型企业和学术界得到了普遍的应用,其不断扩大的影响力终究还是引起了AT&
T的关注,就这样一场持续许久的版权官司开始了,直到AT&
T将自己的贝尔实验室卖给Novell接手。
最初的UNIX是用PDP-7汇编语言别写的,但因为其在系统编程方面没有太大优势,于是Thompson和Ritchie两人对其加以改造,并于1971年共同发明了C语言。
1973年thompson和Ritchie用C语言重写了UNIX,UNIX第三版就这样问世了。
在当时,系统程序大多是由汇编语言编写,thompson和Ritchie此举是非常具有革新意义的。
用C语言编写的Unix代码紧凑简洁、易读、易修改,为此后Unix的进一步发展奠定了扎实的基础。
1.2应用概述
嵌入式Linux是指运行在分布式嵌入式设备上的Linux操作系统,尽管“embedded”这一词经常用来讨论内核方面的知识,但嵌入式应用上的Linuxkernel并没有什么特别之处。
Linux内核都是一样的,只不过在不同的嵌入式设备上需要进行不同的编译步骤,从而让Linux操作系统能够在嵌入式设备上跑起来。
嵌入式操作系统就是将Linux内核和其他各种软件编译成的能够运行在嵌入式分布式设备中的系统。
你得通过付款的方式获得这特定的编译工具,这些编译工具通常指:
交叉编译器、调试器、项目管理软件、引导镜像等等,从而得到完整的一个运行在嵌入式设备上的操作系统。
随着网络的不断发展,网络在嵌入式系统中应用十分广泛,越来越多的嵌入式设备均采用Linux操作系统。
传统的嵌入式系统设备如:
空间站、自动系统、消费电子系统、电话等等都使用Linux系统,但这些嵌入式Linux系统大体上都相同,没有什么新颖的特色。
而且这些都没有提及到系统的结构,Linux系统的结构真正信息包括:
大小、实时、网络能力、和用户的交互能力。
Linux系统的选型非常重要,针对不同用户的需求不一,Linux有很多发行版,在这之中又分很多类:
桌面版、服务器版、企业版。
桌面版针对的大多是普通用户,有很好的桌面环境,比较适合于新手;
服务器版多倾向与终端界面,没有较好的桌面环境,在服务器开发方面有很大优势;
企业版则面向的大多是大型企业,对信息安全,网络稳定方面都很高。
Linux由于其公开的源码及免费的操作系统,在Linuxkernel的代码获取及相关构建工具没有任何限制。
因此对基于Linux平台的Socket网络编程的研究就显得很重要,下图1.1为其C/S简易模式图和图1.2详细模式图:
图1.1C/S简易模式图
图1.2C/S详细模式图
编写Socket的server和client端程序,双方通过socket建立连接,从而完成进一步的通信。
1.3为什么选择Linux
1.代码的质量和可依赖性。
质量和可依赖性是衡量代码优劣的重要标准。
尽管在“qualitycode”众说纷纭,但是大多数编程人员所期望的都有如下几点:
(1)模块化:
每一个功能都写成一个模块,这样不仅易于读写,更加方便以后的移植;
(2)可读性:
一段代码应该能让别人看的下去,这里包括变量的定义,尽量取有意义的变量名,避免inti,j这样的定义;
一段杂乱的让人看一眼就不想往下看的代码一定是不好的,不管功能有多牛。
;
(3)可扩展性:
在增加新的功能时,不要对原来的代码进行大篇幅的修改,而是只要添加对应的功能即可;
(4)可配置性:
可以选择对应的功能特色进行编译,不要的就不编译,从而生成的程序适合自己的使用。
但是配置的过程应该尽量简单人性化。
2.TCP/IP协议由网络层的IP协议和传输层的TCP协议组成,是Internet最基本的协议、是Internet国际互联网络的基础。
Socket通信所采用的协议分为面向连接(TCP)和非面向连接(UDP)的两种,但由于UDP效率较高但是传输不可靠,不能胜任复杂的网络环境,不得不通过超时和重传等手段来实现较高的可靠性;
然而TCP在数据传输方面提供了完全的可靠性,因此选用TCP/IP协议更加可靠些。
3.代码的可获得性。
Linuxkernel源码及所有的开发和编译工具是很方便从网络上获取的。
Linux中最重要的部分Linuxkernel分布在GPL下。
其他的代码也分布在相同的证书下,如BSD等。
构成Linux的大部分代码都是没有限制的。
当源码的访问受限时,开放自由软件组织就会寻找新版本的源码包代替原有的代码。
正是由于这一特性,Linux受到很多电话制造商的青睐,他们将其移植到自己产品中,稍作修改优化使其适合自己的产品。
4.硬件支持。
Linux支持不同种类的硬件平台和设备,尽管有些驱动暂不支持Linux系统,但是对此有很大的期待。
因为很多驱动都由Linuxshequ维护着,你可以毫无顾忌的使用这些驱动。
各种硬件协同工作,使你的工作更加顺畅。
你希望在你自己电脑上编写的程序能够在另一架构的操作系统上正常运行,甚至有不同的设备驱动运行在不同的系统架构上。
5.通信协议和软件标准。
Linux提供了广泛的通信协议和标准的软件支持。
这使得整合Frameworks及相关软件到Linux上变得更加容易。
同时,Linux是U-like的,可以方便的将UNIX程序移植到Linux上。
事实上,许多应用被绑定在一些商用Unixes中,继而被移植到Linux中。
1.4论文的主要工作
第一章:
绪论,大体介绍Linux操作系统发展、应用的现状以及我们选择Linux系统的原因;
第二章:
介绍Linux软件开发中使用的编译工具和调试工具及其简单的使用方法;
第三章:
介绍设计是怎样实现的以及在实现的过程中用到了哪些关键技术并对这些关键技术作简要分析;
第四章:
介绍设计相关的主要代码的实现过程,依次对服务器和客户端主要流程进行介绍,必要的功能展示;
第五章:
设计总结与展望
第二章Linux编程常用工具
2.1嵌入式C语言
C语言最初是由贝尔实验室的职员Thompson和Ritchie于1971年共同开发。
其应用场景很多,如:
操作系统:
Linux;
微控制器:
汽车和航天飞机;
嵌入式处理器:
电话和便携式电子设备等;
DSPProcesser:
数字音频图像处理和TV系统等。
程序的生成过程如图2.1所示:
图2.1程序的生成过程
C语言能够在编程开发领域受到如此高的青睐,主要有以下几个方面的原因:
1.通用性。
因而在跨平台开发时非常方便,C语言的这一特性吸引着广大编程爱好者;
2.执行速度快。
可以指定编译选项从而省去中间过程,以进一步提升程序的执行效率。
3.可移植性。
由于各个平台的差异,当一个程序到不同平台上,只需要从新编译一下源代码即可使用;
4.发展快速。
C语言发展较快。
在上世纪80年代末期由AmericanNationalInstitude发布的ANSIC的C语言标准奠定了其发展的基石。
2.2GCC工具链
GNU/Linux操作系统上往往使用gcc作为编译工具。
其不是一个单独的程序,而是多个程序的组合,因而通常称为toolchain(工具链)。
GCC的全称是GNUComplierCollection,是由GNUProject提供的支持多种编程语言的编译器。
GCC是GNUtoolchain中的重要组成部分,GCC作为一个工具和实例,在自由软件的成长过程中扮演着重要的作用。
同年12月,GCC扩展到能够编译C++,不久之后能够支持的语言更多,如Objective-C、Objective-C++、Fortran、Java和Ada等等。
GCC被移植到多种架构的处理器,并作为一种专业软件开发工具配置于系统中。
GCC同时也集成于大多数嵌入式平台,包括Symbian,AMCC等。
作为GNU操作系统官方指定编译器,GCC被其他U-like操作系统吸收采用,包括Linux和BSD家族。
程序的编译过程如图2.2所示:
图2.2源码到可执行文件的过程
2.2.1GCC的用法
对于GCC的编译选项只要掌握一些常用的选项就可以,其他多大100多种选项有些工程师可能一辈子也不会用到。
gcc基本用法:
gcc[-Wall][-O1..3][-g][-oname]file...
-Wall:
打开所有警告项
-O:
设置优化级别,O0表示关闭优化功能
-g:
将调试信息编译到目标文件中
-oname:
指定输出文件的名称是name
file:
被编译(链接)的文件
2.2.2调试和剖析选项
gcc–g:
以本机格式(stabs,COFF,XCOFF,orDWARF2)生成调试信息供gdb使用。
在大多数系统上,“-g”产生的调试信息只能供GDB使用,这种调试信息在gdb中能很好的工作,而在其他调试器上不是读取不了就是调试器异常崩溃。
如果你想指定调试信息的格式,可通过如下方式:
-gstabs+、-gstabs、-gxcoff+、-gxcoff、-gvms
gcc允许同时使用‘-g’、‘–o’,这种使用方法将会产生令你意想不到的效果:
你定义的一些变量可能不存在、程序会跑飞掉、一些语句不会被执行。
不管是否提供可能的优化输出,但可以肯定的是,这将会产生一些bug。
但是这种方法使得你能够在和最终产品尽可能相同的情况下对代码进行调试。
应当注意,如果你同时使用这两个编译选项,必须清楚所写的某些有关代码已经在优化时被GCC作了些改变。
2.3GDB调试器
GDB(GNUDebuger),是GNU操作系统的标注调试器;
。
GDB作为GNU系统的一部分于1986年由RichardStallman编写,是GPL下的自由软件。
使用者可以监视和修改程序的内部变量,甚至可以独立地