linux网络聊天毕业设计Word格式.docx
- 文档编号:20784473
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:30
- 大小:215.09KB
linux网络聊天毕业设计Word格式.docx
《linux网络聊天毕业设计Word格式.docx》由会员分享,可在线阅读,更多相关《linux网络聊天毕业设计Word格式.docx(30页珍藏版)》请在冰豆网上搜索。
NetworkProgramming;
引言
1.1课题的背景及意义
在网络无所不在的今天,在Internet上,有ICQ、MSN、Gtalk、OICQ等网络聊天软件,极大程度上方便了处于在世界各地的友人之间的相互联系,也使世界好像一下子缩小了,不管你在哪里,只要你上了网,打开这些软件,就可以给你的朋友发送信息,不管对方是否也同时在线,只要知道他有号码。
本次毕业设计主要是为了加强对Linux系统下的编程的各种知识点的整合与灵活运用,让我们更加熟悉Linux下的编程操作。
重点在Linux下socket编程,了解TCP、UDP等协议的使用,并完成课设题目。
Linux操作系统作为一个开源的操作系统被越来越多的人所应用,它的好处在于操作系统源代码的公开化!
只要是基于GNU公约的软件你都可以任意使用并修改它的源代码。
但对很多习惯于Windows操作系统的人来说,Linux的操作不够人性化、交互界面不够美观,这给Linux操作系统的普及带来了很大的阻碍。
因此制作一个Linux操作系统下的拥有人性化界面的实时通讯工具,将给那些刚刚接触Linux操作系统的用户带来极大的方便,而且通过设计这样的一个应用程序还能更好的学习网络编程知识和掌握Linux平台上应用程序设计开发的过程,将大学四年所学知识综合运用,以达到检验学习成果的目的。
1.2网络聊天软件的发展及现状
网络的诞生从某种意义上来说改变了我们的生活,它将这个世界的上不同地域的人之间的距离拉近了。
伴随着网络的诞生,网络聊天软件也随之而来。
最初的网络聊天软件只是有简单的文本界面,功能也十分有限,随着技术的不断发展与强大,拥有更多功能和美观界面的聊天程序走进了我们的生活,也有越来越多的人将网络聊天软件作为他们日常生活交流和通信的工具。
网络聊天软件在国外有ICQ等,在国内主要有OICQ、Ticq和一些基于网页的即时通讯工具,像Chinaren网站上的WebMaster等等,都做得即美观,且功能强大,OICQ现在拥有非常大的用户群。
现在也有很多在网络上不使用服务器的通讯软件,这种软件小巧且方便,也能解决一部分问题。
但是有服务器的通讯软件,有着不可比拟的优势:
可以发送离线消息,不管用户当时是否在线,下次上线时,就可以看到这条消息了。
可以保存用户的个人信息或个人简介,供人查看。
而且,无服务器的通讯软件,是以机器为通讯单元的,而有服务器的聊天软件是以人为通讯单元的。
所以,带服务器的聊天软件在网络上,有着非常广泛的用途,为网络上的通讯带来了极大的方便,它使人与人之间的交流不再只局限于某一个范围,并且它的开销也是很小的,你只需要拥有一部可以联网的PC机就足够了!
1.3TCP/IP协议简介
TCP/IP是国际互联网所采用进行网际互连的通信协议。
实际所称的TCP/IP协议包括了在国际互联网络应用的一组协议,互联网协议族是此协议族的另一个名字。
1.3.1TCP协议简介
因为我们这个程序所采用的是面向连接的TCP协议,所以我们这里就只对TCP(传输控制协议)这一部分作详细的介绍。
TCP:
传输控制协议(TCP:
TransmissionControlProtocol)
传输控制协议是一个TCP/IP组中能够实现可靠数据传送的传输层协议,并通过顺序响应能实现对应用程序的虚拟连接服务,在必要的时候进行包转发。
与IP协议相结合,TCP代表了网络协议的核心。
大多数网络应用程序是在相同的机器上运行的,计算机上必须能确保目的地的应用程序从源地址处获得数据包,及源计算机上的应用程序的回复获得选择的路经。
这一过程是通过使用TCP的“端口号”完成的。
网络IP地址和端口号的连接要达到唯一的标识,我们称之为“套接字”或“端点”。
为了可靠通信,TCP在端点间建立了连接或虚拟电路。
TCP服务提供了数据流传输、可靠行、有效流控制、全双工操作和多路复用技术等。
关于数据流传输,TCP发送一个由序列号定义的无结构的字节流。
这对应用程序有利,因为在被送出TCP之前应用程序不需要划分成块,TCP可以将字节整合成字段,然后发送给IP。
TCP是面向连接的端到端的可靠协议,并保证传送数据包的顺序,而顺序是用一个响应序号来保证的,这个响应序号告诉接收者发送者期望的下一个包。
如果在规定时间内,没有收到关于这个包的确认响应,则需要重新发送此包。
TCP的可靠机制允许设备处理丢失、删除及读错的包。
暂停机制允许设备监测丢失的包并请求重发。
TCP提供了有效流控制。
当向发送者返回发送确认响应,接收TCP进程就会暗示最高序列号,它能接收并保证不会发生溢出。
全双工操作:
TCP进程能够同时发送和接收包。
TCP中的多路技术:
大量上层同时会话在单连接时进行多路复用。
1.3.2UDP协议简介
UDP协议是英文UserDatagramProtocol的缩写,即用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络应用。
包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。
UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。
与我们所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。
根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。
UDP协议的主要作用是将网络数据流量压缩成数据报的形式。
一个典型的数据报就是一个二进制数据的传输单位。
每一个数据报的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。
既然UDP是一种不可靠的网络协议,那么还有什么使用价值或必要呢?
其实不然,在有些情况下UDP协议可能会变得非常有用。
因为UDP具有TCP所望尘莫及的速度优势。
虽然TCP协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响。
反观UDP由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。
1.4套接字简介
应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题。
多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据。
为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口。
区分不同应用程序进程间的网络通信和连接,套接字主要有3个参数:
通信的目的IP地址、使用的传输层协议(TCP或UDP)和使用的端口号。
通过将这3个参数结合起来,与一个Socket绑定,应用层就可以和传输层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。
1.5开发平台简介
1.5.1Linux系统简介
Linux操作系统是UNIX操作系统的一种克隆系统。
它诞生于1991年的10月5日(这是第一次正式向外公布的时间)。
以后借助于Internet网络,并经过全世界各地计算机爱好者的共同努力下,现已成为今天世界上使用最多的一种UNIX类操作系统,并且使用人数还在迅猛增长。
通常所说的Linux,指的是GNU/Linux,即采用Linux内核的GNU操作系统。
GNU代表既是一个操作系统,也是一种规范。
Linux最早由LinusTorvalds在1991年开始编写。
在这之前,RichardStallman创建了FreeSoftwareFoundation(FSF)组织以及GNU项目,并不断的编写创建GNU程序(程序的许可方式均为GPL:
GeneralPublicLicense)。
在不断的有程序员和开发者加入到GNU组织中后,变造就了今天我们所看到的Linux!
以Linux内核的GUN/Linux操作系统使用了大量的GNU软件,包括了shell程序、工具、程序库、编译器及工具,还有许多其他程序,例如Emacs。
正因为如此,GNU计划的开创者理查德·
马修·
斯托曼博士提议将Linux操作系统改名为GNU/Linux。
但有些人只把操作系统叫做"
Linux"
。
Linux的基本思想有两点:
第一,一切都是文件;
第二,每个软件都有确定的用途,同时它们都尽可能被编写得更好。
其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。
Linux是一种自由和开放源码的类Unix操作系统。
目前存在着许多不同的Linux,但它们都使用了Linux内核。
Linux可安装在各种计算机硬件设备中,从手机、平板电脑、路由器和视频游戏控制台,到台式计算机、大型机和超级计算机。
Linux是一个领先的操作系统,世界上运算最快的10台超级计算机运行的都是Linux操作系统。
严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU工程各种工具和数据库的操作系统。
Linux得名于计算机业余爱好者LinusTorvalds。
GNU计划和自由软件基金会(theFreeSoftwareFoundation-FSF)于1984年创办。
旨在开发一个类似Unix、并且是自由软件的完整操作系统:
GNU系统。
在Linux平台上运行的软件都是免费使用的,且你可以随意的改动代码部分,只要他们是完全基于GNU的。
1.5.2编程语言和编程工具简介
因为C语言是平台适应性最强的语言,差不多每种平台上都会有一个C编译器。
C语言也更易移植,因而,在Linux下编程的最佳语言应该是C语言,Linux上的很多应用程序就是用C语言写的。
Linux发布版本中都提供了C编译器gcc。
Linux系统下的gcc(GNUCCompiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。
gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%~30%。
gcc编译器能将C、C++语言源程序、汇程式化序和目标程序编译、连接成可执行文件,如果没有给出可执行文件的名字,gcc将生成一个名为a.out的文件。
gcc所遵循的部分约定规则:
.c为后缀的文件,C语言源代码文件;
.a为后缀的文件,是由目标文件构成的档案库文件;
.C,.cc或.cxx为后缀的文件,是C++源代码文件;
.h为后缀的文件,是程序所包含的头文件;
.i为后缀的文件,是已经预处理过的C源代码文件;
.ii为后缀的文件,是已经预处理过的C++源代码文件;
.m为后缀的文件,是Objective-C源代码文件;
.o为后缀的文件,是编译后的目标文件;
.s为后缀的文件,是汇编语言源代码文件;
.S为后缀的文件,是经过预编译的汇编语言源代码文件。
调试器GDB能让你观察另一个程序在执行时的内部活动,或程序出错时发生了什么。
GDB主要能做四件事(包括为了完成这些事而附加的功能),帮助用户找出程序中的错误。
1)运行程序,设置所有的能影响程序运行的东西。
2)保证程序在指定的条件下停止。
3)当程序停止时,让用户检查发生了什么。
4)改变程序。
那样用户可以试着修正某个bug引起的问题,然后继续查找另一个bug。
用户可以用GDB来调试C和C++写的程序。
1.6本章小结
随着计算机应用技术的日益普及,网络也遍及到我们生活的每个角落,很好的利用这人资源,将为我们的工作和学习带来极大的方便和提高工作效率。
所以,开发一个网络里的C/S通讯软件是十分必要的。
由于设计该软件的主要目的是深入的学习Linux平台上应用程序的编写方法,本系统将采用GNU的理论方法进行开发。
1第二章Socket的基础知识
12.1Socket简介
Socket实际是网络传输层供给应用层的编程接口。
为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口,区分不同应用程序进程间的网络通信和连接。
socket非常类似于电话插座。
以一个国家级电话网为例。
电话的通话双方相当于相互通信的2个进程,区号是它的网络地址;
区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于socket号。
任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;
同时要知道对方的号码,相当于对方有一个固定的socket。
然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地址)。
对方假如在场并空闲(相当于通信的另一主机开机且可以接受连接请求),拿起电话话筒,双方就可以正式通话,相当于连接成功。
双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。
通话结束后,一方挂起电话机相当于关闭socket,撤消连接。
Socket可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket中,使这段信息能传送到其他程序中。
网络化的应用程序在开始任何通讯之前都必须创建套接字,生成套接字,主要有3个参数:
通信的目的IP地址、使用的传输层协议、使用的端口号。
传输层则在网络层的基础上提供进程到进程问的逻辑通道,而应用层的进程则利用传输层向另一台主机的某一进程通信。
Socket就是应用层与传输层之间的桥梁。
使用Socket编程时可以开发客户机和服务器应用程序,它们可以在本地网络上进行通信,也可以通过Internet在全球范围内进行通信。
编写并运行Socket的客户端和服务器端程序,双方通过套接字建立了服务连接请求,并且通过一些方法提高Socket的性能。
随着Internet的日益发展和普及,网络在嵌入式系统中应用非常广泛,越来越多的嵌入式设备采用Linux操作系统。
Linux是一个源代码公开的免费操作系统,具有强移植性,所以对基于Linux的Socket网络编程的研究越来越重要。
2.2Socket类型
常见的Socket有3种类型:
1、流式Socket(SOCK_STREAM)流套接字用于提供面向连接、可靠的数据传输服务。
该服务将保证数据能够实现无差错、无重复发送,并按顺序接收。
流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(TheTransmissionControlProtocol)协议。
它提供可靠的通信流,使用面向连接的TCP协议,从而保证数据传输的正确性和顺序性,流式的套接字可以提供可靠的、面向连接的通讯流。
流式套接字提供的是面向连接的服务。
提供双向的、有序的、不重复的数据流服务,比较实用于大量数据的传输。
在通信双方必须建立连接,存在一条路径建立连接,这样需要较多的网络信道开支,但是保证了准确无误的信息传送。
如果你通过流式套接字发送顺序的数据:
“1”、“2”,那么数据到达的顺序也是“1”、“2”。
流式套接字在AF_INET域中使用TCP协议来保证数据传输的正确性及顺序性。
TCP是TCP/IP协议的前半部分,IP只处理网络路由
2、数据报Socket(SOCK_DGRAM)数据报套接字提供了一种无连接的服务。
该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。
数据报套接字使用UDP(UserDatagramProtocol)协议进行数据的传输。
由于数据包套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。
数据报协议定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错。
它使用UDP/IP协议。
UDP将数据打包,贴上IP地址,然后发送。
这个过程不需要建立连接。
数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错,它定义一种面向无连接的服务,使用数据报协议UDP;
3、原始Socket(SOCK_RAM)原始套接字(SOCK_RAW):
原始套接字与标准套接字(标准套接字指的是前面介绍的流套接字和数据报套接字)的区别在于:
原始套接字可以读写内核没有处理的IP数据包,而流套接字只能读取TCP协议的数据,数据报套接字只能读取UDP协议的数据。
因此,如果要访问其他协议发送数据必须使用原始套接字。
原始套接字主要用于一些协议的开发,可以进行比较底层的操作。
它功能强大,但是没有流式套接字和数据报套接字使用方便,一般的程序也不涉及到原始套接字。
它允许直接访问底层协议,功能强大但使用较为不便,主要用于一些协议的开发。
本编写的Socket属于流式Socket。
2.3
socket与端口
Socket,是一种双向的通信端口。
位于网络中的主机通过连接的套接字提供的接口进行数据传输。
本节将主要介绍使用套接字进行编程的一些基本概念。
套接字是一种使用标准UNIX文件描述符(filedescriptor)与其他程序通信的方式。
套接字可以看作是处于不同主机之间的两个程序的通信连接端点。
一方面程序将要传输的信息写入套接字中,而另一方面则通过读取套接字内的数据来获得传输的信息。
假设存在两台主机A与B,在主机A中存在进程C,主机B中存在进程D,当进程C需要将数据送到进程D时,首先将数据写到套接字中,而进程D可以通过读取套接字来获得进程C发送的信息。
在网络中,不同计算机是通过IP地址来区分的,也就是说,要将数据由主机A发送到主机B,只要知道主机B的IP地址就可以确定数据要发送的目的地。
但是,在主机A与B中不可能只有进程C和进程D两个进程。
主机B在收到主机A发送来的数据后,如何才能确定该数据是发送给进程D?
因此,还需要某种标识信息,用于描述网络通信数据发往的进程。
TCP/IP协议提出了协议端口的概念,用于标识通信的进程。
当进程与某个端口绑定后,操作系统会将收到的给该端口的数据送往该进程。
与文件描述符类似,每个端口都有被称为端口号的整数类型的标识符,该标识符用于区分不同的端口。
不同协议可以使用相同的端口号进行数据传输。
例如,TCP使用了344的端口号,UDP同样可以使用344端口号进行数据传输。
端口号为一个16位的无符号整数,其取值范围为0~65535。
低于256的端口被作为系统的保留端口号,主要用于系统进程的通信,不在这一范围的端口号被称为自由端口号,可以由进程自由使用。
2.4套接字地址
AF_INET与AF_UNIX域的套接字地址结构不相同,分别为structsockaddr_in,structsockaddr_un。
1、AF_INET地址结构
#include<
nutrient/inch>
structsockaddr_in
{
shortintsin_family;
/*AF_INET*/
unsignedshortintsin_port;
/*PortNumbers*/
structin_addrsin_addr;
/*InternetAddress*/
}
2、IP地址结构in_add定义为:
structin_addr
unsignedlongints_addr;
/*IP地址是四个字节的一个32位值*/
3、AF_UNIX地址结构
sys/un.h>
str
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 网络 聊天 毕业设计
![提示](https://static.bdocx.com/images/bang_tan.gif)