2022年Linux网络聊天室设计方案.docx
《2022年Linux网络聊天室设计方案.docx》由会员分享,可在线阅读,更多相关《2022年Linux网络聊天室设计方案.docx(42页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精品学习资源封面欢迎下载精品学习资源作者: PanHongliang仅供个人学习姓名: 方 建学号: 109074359班级:网络工程 103欢迎下载精品学习资源1 背景1.1 开发背景在网络无所不在的今日,在Internet 上,有 ICQ 、MSN 、Gtalk、OICQ等网络谈天软件,极大程度上便利了处于在世界各地的友人之间的相互联 系,也使世界好像一下子缩小了,不管你在哪里,只要你上了网,打开这些软件,就可以给你的伴侣发送信息,不管对方是否也同时在线,只要知道他有号码;Linux 操作系统作为一个开源的操作系统被越来越多的人所应用,它的好处在于操作系统源代码的公开化!只要是基于GNU
2、公约的软件你都可以任意使用并修改它的源代码;但对许多习惯于Windows 操作系统的人来说,Linux 的操作不够人性化、交互界面不够美观,这给Linux 操作系统的普及带来了很大的阻碍;因此制作一个Linux 操作系统下的拥有人性化界面的实时通讯工具,将给那些刚刚接触Linux 操作系统的用户带来极大的便利,而且通过设计这样的一个应用程序仍能更好的学习网络编程学问和把握LINUX 平台上应用程序设计开发的过程,将高校四年所学学问综合运用,以达到检验学习成果的目的1.2 linux介绍Linux 是一种针对 PC 运算机和工作站的操作系统 ,它具有像 Windows 和 Mac 那样的功能齐全
3、的图形用户界面( GUI,Graphical User Interface; Linus Torvald 和其它的遍布世界各地的编程人员共同开发的;作为一种操作系统 ,欢迎下载精品学习资源它 具 有 与 Unix,Mac,Windows和 WindowsNT同 样 的 功 能 ;提到 Linux 我们不能不提 GNU 和 Unix ;Richard M.Stallman 建立的自由软件 联 盟 出版 了 两 种 许 可证 ,GNU通 用公 共 许 可 证 GNU Gneral Public License,GPL 和 GNU函数库通用公共许可证GNU LibraryGneral Public
4、License,LGPL;大部分 GNU 工程的软件和文档是以GNU 通用公共许可证发行的 ,但是有一些库是以GNU 函数库通用公共许可证发行的;依据GNU通用公共许可证的规定 ,Linux 的源代码可以自由猎取 ,这中意了我们学习该系统的猛烈愿望; GPL 充分表达了 Stallman 的思想:只要用户所做的修改是同等自由的 ,用户可以自由地使用、拷贝、查询、重用、修改甚至发布这个软件;通过这种方式 ,GPL 保证了 Linux (以及同一许可证下的大量其他软件)不仅现在自由可用,而且皮后经过任何修改这后都仍然可以自由使用;Unix 是由 AT T 贝尔试验室的 Ken Thompson 和
5、 Dennis Ritchie 于 1969 年在一台已经废弃了的 PDP-7 上开发的;最初它是一个用汇编语言写成的单用户操作系统;后来 ,他们又在 PDP-11 上用 C 语言重新编写(制造C 语言的部分目的就在于此) ,把 Unix 做成为了一个文本处理系统 ,这使 Unix 在贝尔试验室得到广泛的应用; Unix 的最初版本免费供应应许多知名的高校的运算机系使用;加州高校伯克利分校的运算机系就是其中的一名,并地 Unix 进行了修改增加了许多新的特点 ,这就是主为人知的BSC 版本的 Unix ;与此同时 ,其它独立开发的 Unix 版本也开头萌生; Unix 不断进展了 ,各种版本被
6、应用到不同的运算机使用;而Linux 最初是特地为基于Intel 的个人运算机设计的;( 1)Linux 的昨天 1991 年,一名叫 Linus Torvalds 的芬兰高校生对 Unix 各种版本对于 80386 类的机器的脆弱支持特殊不满,他准备要开发出一个全功能 的、支持 POSIX 标准的、类 Unix 的操作系统内核 ,该系统吸取了 BSD 和欢迎下载精品学习资源System V 的优点 ,同进摒弃了它们的缺点;他独立把这个内核开发到0.02 版, 这个版本已经可以运行gcc、bash 和很少的一些应用程序;后来 ,他又开头了在因特网上寻求广泛的帮助;1994 年,Linux 已经
7、升级到 1.0 版本;它的源代码量也呈指数形式增长 ,实现了基 本 的 TCP/IP功 能 , 此 时 Linux已 经 拥 有 大 约 10万 的 用 户 ;(2)Linux的今天作为一各服务器级的操作系统,Linux 已经成熟了;现在的Linux 内核由150 多行代码组成 ,能作为 Web 服务器平台 ,也为越来越多的商业用户供应文件和打印服务;它既被当作邮件服务器的一种候选平台,也被当作一种强壮而安全的防火墙;Linux 的企业级特性 ,比如支持多处理器、支持大型文件系统、日志文件系统 以 及 密 集 型 计 算 和 高 可 用 性 集 群 技 术 , 也 逐 步 成 熟 ;桌面上的
8、Linux 也在连续完善; KDE 桌面供应的图形用户界面在易用性和可 配 置 方 面 都 能 和 微 软的Windows相 媲 美 ;( 3) Linux的明天 Linux 最强大的生命力在于其公开的开发过程;每个人都有可以自由猎取内核源程序,每个人都有要不得以运载源程序加以修改,而后他人也可以自由猎取你修改后的源程序;Linux 这种特殊的自由流畅的开发模型已被命名为 bazaar(集市模型); Bazaar 开发模型通过重视试验 ,征集并充分利用早期的反馈 ,对巨大数量的脑力资源进行平稳配置,可以开发出更优秀的软件;本联盟就是想通过bazaar开发模型 ,在网上召集一些 Linux 的爱
9、好者,开发出更优秀的操作系统或软件;欢迎下载精品学习资源2 技术说明2.1 TCP 和 UDP 通信的概念2.1.1 UDP 通信UDP 是用户数据报协议的简称;它是以中午连接的规律通信信道;UDP 在传送数据之前不需要先建立连接,远地主机的传输层在收到udp 数据报后,不需要给出任何确认,所以不能保证其交付时牢靠;它的特点是:因无连接,故供应的是不行靠的信道,但也是因无连接而具有很好的传输效率;2.1.2 TCP 通信TCP 是传输把握协议的简称,它是供应一条全双工的、牢靠的信道;TCP 供应面对连接的服务,在传送数据之前必需先建立连接,数据传送终止后要释放连接; TCP 不供应广播和多播服
10、务;由于 TCP 要供应牢靠的、面对连接的运输服务,所以不行防止地增加了许多系统开销,比如确认、流量把握、计时器以及连接治理等都需要占用许多系 统的时空资源; 两个运算机之间假如使用TCP 通信,其连接过程需要三次握手实现,照试验图 1-1 所示;图 1-1 用三次握手建立 TCP 连接对于两个运算机之间连接的释放过程也需要类似的3 次握手的相互确认的过程,照试验图 1-2 所示;图 1-2 TCP 连接的释放过程欢迎下载精品学习资源2.2 客户/服务器模型在客户/服务器模型中,多个相互通信的运算机都作为客户端,与网络服务 器进行连接,并通过服务器进行信息的传递;所以多个客户端之间的通信就变
11、为了客户端与服务端的通信;所以,接受客户/服务器模型进行网络谈天需要分别编写服务器端和客户端的程序,服务器和客户端之间相互通信的同步关系 和各自的程序流程照试验图 1-3 所示;图 1-3 Socket通信流程图2.3 网络套接字( socket )的概念1介绍上世纪中后期 ,在美国国防部高研署 DARPA将TCP /IP的软件供应应加利尼亚高校 Berkeley分校后 , TCP /IP很快被集成到 Unix中,同时显现了许多成熟的 TCP /IP应用程序接口 API;这个 API 称为Socket接口套接口;Socket在运算机中供应了一个通信端口,可以通过这个端口与任何一个具有 Sock
12、et接口的运算机通信;应用程序在网络上传输, 接收的信息都通过这个 Socket接口来实现;在应用开发中就像使用文件句柄一样,可以对Socket句柄进行读、写操作;今日 , Socket接口是TCP /IP网络最为 通用的 API,也是在 Internet上进行应用开发最为通用的API;Linux操作系统具有良好的稳固性和杰出的网络性能,因此被广泛应用于网络服务领 域;而在 Linux 下开发高性能的网络通信程序,是充分发挥 Linux网络特性的一个关键因素;2 Socket原理简介欢迎下载精品学习资源当用电话与他人通信时 ,必需拿起话筒 ,拨叫对方的电话号码 ,然后等待对方的应答;当双方进行
13、通话的时候 ,就建立了一个具有两个端点的通 信线路 , 这两个端点是 : 本地的电话号码 在本位置置 ;对方的电话号码 在对方的位置处 ;双方的通信与通信的两个端点和他们之间的通信线路 有关; Linux中的套接口与电话特殊相像;套接口代表通信线路中的端点, 两端点之间就是数据通信网络;套接口与电话的相像性仍表现在另一方面;当给某人打电话时 ,拨叫的是对方用户的电话号码;而套接口中的网络地址就相当于电话号码;通过在程序中指定远程套接口的地址,就可以建立从本地套接口到远端套接口的通信; TCP /IP是运算机互连最常使用的网络通讯协议,TCP /IP的核心部分由网络操作系统的内核实现, 应用程序
14、通过编程接口来拜望TCP /IP ;套接字 Socket是介于网络应用层和传输层之间的编程接口,套接字接口供应了拜望下层通信协议的大量系统调用和相应的数据结构;在 Linux中,套接字接口是应用程序拜望下层的网络协议的惟一方法; 详细讲 , 套接字在用户级实现了两个应用程序之间的网络连接和数据交换, 所以 Linux中的套接字意味着网络上的连接;套接字在TCP /IP网络模型中的位置如图 1所示;Socket分为以下三种类型 :流式套接字 Stream Socket :是最常用的套接字类型 ,文件传送协议 FTP即使用流式套接字;供应一个面对连接、牢靠的数据传输服务,数据无差错、无重复地发送
15、,且按发送次序接收;内设流量把握,防止数据流欢迎下载精品学习资源超限; 数据被看作 是字节流,无长 度限制; 数据报套接字 Datagram Socket : TCP /IP协议族中的 UDP协议使用此类接口 ,它是无连接的服务 , 数据通过相互独立的报文进行传输,供应了一个无连接服务;数据包以独立 包形式被发送 ,不供应无错保证 ,数据可能丢失或重复 ,并且接收次序混 乱;原始数据报套接字 Raw Socket :该接口答应对较低层协议 ,如IP 、ICMP 直接拜望;常用于检验新的协议实现或拜望;3 Socket通信过程与程序开发3.1 Socket通信过程基于TCP 牢靠连接的客户与服务
16、器连接进程流程图如图2;Socket 工作过程如下 : 服务器第一启动 , 通过调用 Socket , 建立一个Socket, 然后调用 bind 将该Socket 和本地网络地址绑系在一起 , 再调用listen 使Socket 做好侦听的预备 , 并规定它的请求队列的长度 , 之后就调用accept 来接收连接;客户在建立 Socket 后就可调用 connect 和服务器建立连接;连接一旦建立 , 客户机和服务器之间就可以通过调用 send 和recv 来发送和接收数据;最终 , 待数据传送终止后 , 双方调用 close 关闭Socket ;3.2 Socket通信程序开发下面详细说明
17、 Socket 通信程序的开发过程 : 1步骤1:建立套接口 socketint sockfd = socket int domain, int type, intprotocol ,其中 domain 参数指定 socket协议族 ,包括 PF_LOACL和PF_INET, PF_LOACL 表示使用本地套接口 , PF_INET表示使用 Internet套接口; Type 参数定义欢迎下载精品学习资源了套接口的类型 , 包括SOCK_STREA和MSOCK_DGRAM, SOCK_STR指EA定M为流套接口 ,SOCK_DGRA指M定为数据报套接口; protocol 通常赋值“ 0” ,
18、 意味套接口使用 TCP /IP 协议; socket 调用返回一个整型 socket 描述符 , 可以在后面的调用使用它 , 当其值为 - 1 时, 说明有错误发生; 2 步骤2: 绑定套接口 bind当用socket建立套接口后 ,该套接口仍是处于无名状态的,无名套接口就象没有号码的电话一样, 别人无法向发送信息 在同一 linux内核下可实现无名状态下通信 ;为了像电话支配电话号码一样 ,可以通过 bind为建立的套接口绑定一个名字支配地址;这一步对客户端不是必需的;int bind int sockfd, struct sockaddr_my_addr,int addrlen ;soc
19、kfd 是一个socket 描述符, my_addr 是一个指图 运算机应 用 向包含有本机IP 地址及端口号等信息的sockaddr 类型的指针;addrlen 常被设置为 sizeof structockaddr ,假如函数调用成功 , 就返回0, 否就就返回为 - 1, 我们可以通过查看 errno 的值来明白错误的原因;需要指出的是 , 可以用下面的赋值实现自动获得本机 IP 地址和随机猎取一个没有被占用的端口号 :my_addr.sin_port=0 ; / 系统随机选择一个未被使用的端口号 /my_addr.sin_addr.s_addr=INADDR_ANY ; / 填入本机 I
20、P 地址/ 通过将 my_addr.sin_port置为 0,函数会自动为选择一个未占用的 端口来使用;同样 ,通过将 my_addr.sin_addr.s_addr置为INADDR_ANY,系统会自动填入本机 IP 地址; bind函数在成功被调用时返回 0; 遇到错误时返回“ - 1 ”并将 errno置为相应的错误号;另外要留意的是,当调用函数时,一般不要将端口号置为小于1024 的值,由于 1 1024 是保留端口号 ,欢迎下载精品学习资源可以使用大于 1024 中任何一个没有被占用的端口号;( 3 步骤 3: 请求连接connect 当客户端绑定地址后 , 发送请求连接信号 conn
21、ect 来与远端服务器建立一个 TCP 连接; connect 函数原型为 :int connect int sockfd,struct sockaddr serv_addr, int addrlen ; sockfd 是目 的服务器 的socket描 述符 ; serv_addr 是包含目 的机 IP地 址和 端口号的 指针 , addrlen为结构的大小;遇到错误时返回- 1,并且 errno中包含相应的错误码;进行客户端程序设计无须调用bind,由于这种情形下只需知道目的 机器的 IP 地址,而客户通过哪个端口与服务器建立连接并不需要关怀,内核会自动选择一个未被占用的端口供客户端来使用;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022 Linux 网络 聊天室 设计方案
限制150内