linux下网络聊天工具的设计和实现_第1页
linux下网络聊天工具的设计和实现_第2页
linux下网络聊天工具的设计和实现_第3页
linux下网络聊天工具的设计和实现_第4页
linux下网络聊天工具的设计和实现_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、-. z?Linu*课程设计?Linu*下聊天工具的设计与实现课题: Linu*下网络聊天工具的设计与实现:郭思奎 *: 22111440111 班级: 2021级通信工程班 指导教师: 董志诚 设计时间: 2021.06.30 -. z-. z摘 要这个毕业论文整体采用在linu*平台下,在同一局域网实现聊天功能。整体框架主要分为效劳端和客户端两个局部,设置好ip和端口号,在Linu*下编译和调试两主大块程序,实现效劳端和各个客户端的连接,然后以效劳端作为中继转实现客户端之间的通信。由于效劳端只有一个,而客户端可以有任意多个,所以效劳端采用了链表来管理多个客户端的信息,客户端的信息发送通过封

2、装在构造体中进展传输。本设计采用TCP/IP协议保证连接可靠,并在工程管理中采用linu*流行的gcc和makefile编译,提高了编译和调试效率,加快了工程的完成速度。由于要模拟多个客户端,所以在运行的环境中需要在PC机上再克隆一个虚拟系统来操作多个客户端。本次设计的聊天工具采用字符串命令行的方式进展通信,主要实现了五个功能:新用户的注册与登录,用户之间一对一的聊天,用户之间群聊,用户之间文件加密传输,用户之间聊天记录保存。经过测试,程序运行可靠,能满足在linu*中实现网络聊天的要求。关键词 linu*,socket,gedit,效劳端,客户端,网络编程-. zABSTRACTThis t

3、hesis gets the realization of chat in the same LAN under the Linu* platform. The overall framework is divided into two parts: server and client. Set up the IP and port number, pile and debug two main bulk programs in the Linu* and realize the connection between the server and the clients, and then r

4、ealize the munication between clients by relying on server. Since there is only a server, but are multiple clients, so the server adopts a linked list to manage multiple clients information, and the information of clients is packed into struct to transfer. This design adopts the TCP/IP protocol to e

5、nsure reliable connection, and uses the Linu* gcc and makefile piler in project management, which improves the piling and debugging efficiency, and speeds up the project pletion. Due to the simulation of multiple clients, so it needs to clone a virtual system in the PC machine to operate multiple cl

6、ients in the running environment. The chat tool of the design works by using the method of character stringmand line, which mainly acplishes five functions: new users registration and login, biunique chat between users, users group chat, file encryption and transmission between users, users chat rec

7、ord retention. After the test, the program is reliable, and can meet the requirements of network chat in Linu*.KeywordsLinu*, socket, gedit, server, client, network programming-. z目 录TOC o 1-3 h u HYPERLINK l _Toc15727 摘 要 PAGEREF _Toc15727 I HYPERLINK l _Toc28129 ABSTRACT PAGEREF _Toc28129 II HYPER

8、LINK l _Toc26171 1 绪论 PAGEREF _Toc26171 1 HYPERLINK l _Toc15567 1.1研究背景 PAGEREF _Toc15567 1 HYPERLINK l _Toc9244 1.1.1 Linu*的介绍 PAGEREF _Toc9244 1 HYPERLINK l _Toc28486 1.1.2 linu*的开展史 PAGEREF _Toc28486 2 HYPERLINK l _Toc1032 1.1.3 socket介绍 PAGEREF _Toc1032 2 HYPERLINK l _Toc13999 1.2 研究意义 PAGEREF _

9、Toc13999 3 HYPERLINK l _Toc4326 1.3 国外研究现状 PAGEREF _Toc4326 3 HYPERLINK l _Toc7409 2 需求分析 PAGEREF _Toc7409 5 HYPERLINK l _Toc5421 2.1 功能需求 PAGEREF _Toc5421 5 HYPERLINK l _Toc21006 2.2 性能需求 PAGEREF _Toc21006 5 HYPERLINK l _Toc31393 2.3模块划分 PAGEREF _Toc31393 5 HYPERLINK l _Toc13172 2.4 模块调用关系 PAGEREF

10、_Toc13172 6 HYPERLINK l _Toc16582 2.5 系统总流程图 PAGEREF _Toc16582 6 HYPERLINK l _Toc17189 2.6 文件信息平安 PAGEREF _Toc17189 8 HYPERLINK l _Toc2037 3 linu*网络编程 PAGEREF _Toc2037 9 HYPERLINK l _Toc13546 3.1 socket概念及功能 PAGEREF _Toc13546 9 HYPERLINK l _Toc24139 3.2 socket类型 PAGEREF _Toc24139 9 HYPERLINK l _Toc1

11、0779 3.3 socket函数 PAGEREF _Toc10779 10 HYPERLINK l _Toc9405 3.3.1 API功能介绍 PAGEREF _Toc9405 10 HYPERLINK l _Toc14546 3.3.2 套接口地址构造 PAGEREF _Toc14546 10 HYPERLINK l _Toc22037 3.3.3 根本转换函数 PAGEREF _Toc22037 13 HYPERLINK l _Toc378 3.3.4 socket编程流程 PAGEREF _Toc378 13 HYPERLINK l _Toc1710 3.4 TCP/IP协议 PAG

12、EREF _Toc1710 14 HYPERLINK l _Toc28189 3.4.1 OSI概述 PAGEREF _Toc28189 14 HYPERLINK l _Toc27422 3.4.2 TCP/IP 协议概述 PAGEREF _Toc27422 15 HYPERLINK l _Toc20704 3.4.3 TCP/IP层次构造 PAGEREF _Toc20704 17 HYPERLINK l _Toc25913 3.4.4 TCP通信 PAGEREF _Toc25913 18 HYPERLINK l _Toc901 4 文件传输加密及相关技术 PAGEREF _Toc901 20

13、 HYPERLINK l _Toc21001 4.1 文件描述符描述 PAGEREF _Toc21001 20 HYPERLINK l _Toc30711 4.2 文件操作函数 PAGEREF _Toc30711 20 HYPERLINK l _Toc5297 4.3 DES加密算法 PAGEREF _Toc5297 20 HYPERLINK l _Toc9782 4.3.1 密钥计算过程 PAGEREF _Toc9782 21 HYPERLINK l _Toc10022 4.3.2 初始置换ip和逆初始置换ip PAGEREF _Toc10022 21 HYPERLINK l _Toc203

14、61 4.3.3 P置换和扩大置换E PAGEREF _Toc20361 22 HYPERLINK l _Toc12729 4.3.4 F函数和S盒置换 PAGEREF _Toc12729 22 HYPERLINK l _Toc8785 4.4 linu*线程通信 PAGEREF _Toc8785 23 HYPERLINK l _Toc20358 4.5 链表 PAGEREF _Toc20358 24 HYPERLINK l _Toc31255 5 具体实现 PAGEREF _Toc31255 25 HYPERLINK l _Toc14482 5.1 登录和注册实现 PAGEREF _Toc1

15、4482 25 HYPERLINK l _Toc18664 5.1.1 注册实现 PAGEREF _Toc18664 25 HYPERLINK l _Toc32323 5.1.2 登录实现 PAGEREF _Toc32323 25 HYPERLINK l _Toc3597 5.2 私聊和群聊PAGEREF _Toc3597 26 HYPERLINK l _Toc26187 5.2.1 私聊 PAGEREF _Toc26187 26 HYPERLINK l _Toc16687 5.2.2 群聊 PAGEREF _Toc16687 26 HYPERLINK l _Toc22110 5.3 文件传输

16、和DES加密 PAGEREF _Toc22110 27 HYPERLINK l _Toc29488 5.4 错误方案解决 PAGEREF _Toc29488 30 HYPERLINK l _Toc24010 6 运行效果 PAGEREF _Toc24010 31 HYPERLINK l _Toc6204 6.1 编译操作 PAGEREF _Toc6204 31 HYPERLINK l _Toc474 6.2 注册和登录运行效果图 PAGEREF _Toc474 31 HYPERLINK l _Toc8975 6.3 私聊和群聊效果图 PAGEREF _Toc8975 33 HYPERLINK

17、l _Toc27250 6.4 文件传输效果图 PAGEREF _Toc27250 34 HYPERLINK l _Toc948 6.5 文件容加密效果图 PAGEREF _Toc948 35 HYPERLINK l _Toc22618 完毕语 PAGEREF _Toc22618 36 HYPERLINK l _Toc27925 参考文献 PAGEREF _Toc27925 37 HYPERLINK l _Toc23313 致 PAGEREF _Toc23313 38-. z1 绪论随着Internet的快速开展和普及,网络已经遍布世界各个角落。由于网路的快速便捷,使得人们深深的爱上了它,因此

18、网络在人们的交流中显得越来越重要,使得人们的交流方式也变得越来越丰富。由于市场的需求和开展空间的很大,各种通信软件迅速成长。比方现在的QQ,MSN,微信,微博等网络聊天软件。通过网络,人们可以迅速的了解各种有用信息,使人们足不出门就可以了解天下大事。并且不管两个人离的有多远,都可以随时保持联系,因此拉近了人与人之间的距离。更重要的是,当遇见一些自然灾害使得通讯不好使用时,这些网络聊天工具就发挥了极大作用。这些软件功能都很完善,作为即将毕业的大学生,可以模拟实现这些软件的局部功能,已到达自己对网络的理解和锻炼自己的编程能力,因此本次毕业论文设计主要研究的就是在linu*开发平台上模拟局域网的网络

19、聊天,使一个效劳器与多个客户端之间建立并发送信息。这次毕业设计能够使我更加熟悉linu*下编程操作,而更重要的是掌握socket编程,熟悉tcp和udp协议,掌握单链表的用法。1.1研究背景1.1.1 Linu*的介绍在本次设计中是在linu*系统中完成的,所以首先需要了解linu*系统的来龙去脉。Linu*是在Uni*的根底上修改实现的,其主要的改变就是核源码在网上完全公开。所有人都可以把下载的核源码拿来直接用或者任意的修改,并且经修改正后的源码也必须是公开的。经过几年的开展,linu*已经有很大的改变,所以现在linu*有很多版本,但它们都遵循Linu*最初的核。Linu*系统的可移植性很

20、高而且投资相对于其它系统而言较低,所以各种类型的计算机硬件设备中都选择安装linu*系统,特别是现在很热的嵌入式设备中。在现在的IT行业中,Linu*就是一种表示核,是大家普遍都认同的说法,因为linu*是使用GNU 工程中各种工具和数据库的一种操作系统。Linu*得名于计算机业余爱好者Linus Torvalds。Linu*支持各种各样的软件包括大量免费软件,因此为用户提供了很大的方便。Linu*在其创始人开发过后,就由世界上各种IT精英爱好者共同开发,提出他们自己的看法并进展修改,作为一个操作系统,它具有Uni*、Mac、Windows和WindowsNT同样的功能。从本质上讲,Linu*

21、是Uni*系统的克隆,在源码级上兼容绝大局部的Uni*标准,它遵循POSI*规。只要是使用linu*就不得不提到GNU,GNU工程开场于1984年,旨在开发一个类似 Uni*、并且是自由软件的完整操作系统:GNU系统。GNU 是GNU Not Uni*的递归缩写。由于GNU操作系统的核心是linu*,所以GUN的使用正在一步步变大。Linu*操作系统在早期开发和使用中有许多软件比方:gcc编译程序、make编译管理程序、gas汇编程序、bash命令解释程序等等。GNU和linu*是相互依存的,没有GNU linu*就是一个简单的框架,毫无使用之处,同时没有linu* GNU也不会受到人们的欢送

22、。Linu* 操作系统作为一个开源的操作系统被很多IT同行的人所认同,它能够吸引人最大的地方就是下载核源码不需要本钱。只要使用遵循使用原则就可以任意使用并修改它的源代码。1.1.2 linu*的开展史Linu*的创始人,是一名叫Linus Torvalds的芬兰大学生。他当时发现了Uni*系统的一些薄弱功能给他带来了很多的不便,于是他决定在Uni*的根底上继续开发出来有别于Uni*系统的操作系统,该系统弥补了Uni*系统的缺点,同时又添加了新功能。通过他不懈的努力,在linu*核中能实现一些根本的应用程序。由于Linu*一开场就把Linu*的源代码放在网络上,引起了很多的爱好者的注意,因此这些

23、爱好者也参加到linu*核开发中,随着越来越多的高水平的爱好者参加,该系统的开展迅速膨胀,很快各种版本的linu*产生。由于大量的增添和修改,使linu*的文件框架越来越大,越来越稳定,而且实现了根本的TCP/IP功能,使得linu*在Internet中迅速成长。经过二十多年的开展,现在Linu*系统已经以成熟的一面展现在人们面前。现在的Linu*核更加稳定和健全,而且获取核源码更加的简单实用,所以现在的商家抓住这些特点,开场大量普遍的运用linu*系统。由于linu*到目前为止几乎没有被木马和病毒所困扰,所以也把它当作一种强壮而平安的防火墙。刚开场linu*系统进入过后只是命令字符界面,还没

24、有一个成型的桌面系统。一个系统要受到人们的欢送,必须要图形界面,并且图形界面要美观且操作简单。所以桌面上的Linu*也在不断的完善之中。现在推行出来的ubuntu,centos等图形界面都很受人们的喜爱,可以和微软的界面系统一比高低。由于linu*系统核小,兼容性好,效率高,稳定性强等特点,所以几乎在各个行业都能看见linu*的身影,比方:军事,金融,电信以及政府。当今计算机领域比拟巨型的效劳器大多采用LINU*操作系统。可见LINU*在网络和分布式系统的应用将是很有前景的。Linu*以后必将成为一种新的系统潮流。1.1.3 socket介绍在网络中聊天以及发送信息等需求,几乎都要用到网络编程

25、中的socket,所以有一切皆socket一说。Linu*系统中有很多关于网络编程的函数库,因此linu*支持各种类型的套接字。接着就描述一下套接字,Socket接口是TCP/IP网络的一个重要连接,在该操作系统核中定义了Socket接口和各种函数之间的调用关系,通过这个接口我们可以实现许多网络上的应用程序。对于Internet上的TCP/IP网络编程,首先要理解Socket接口。该套接口是TCP/IP协议中最常用的的接口。Linu*中一切都是文件,所以套接字通信就是一种特殊的I/O,也就说明它是一种文件描述符,所以对socket的操作就是对socket的读写实现。效劳端和客户端这两个进程要进

26、展通信,需要socket提供端点来实现它们之间的互相通信。套接字也是一种面向c/s构造的思路,不同的套接字对应不同的效劳端和客户端,效劳端的套接字号是所有客户端都能识别的,任何客户端随机申请套接字都能与效劳端建立连接。常用的Socket类型有两种:流式Socket SOCK_STREAM和数据报式SocketSOCK_DGRAM。1.2 研究意义随着互联网技术的开展,互联网应用越来越丰富。人们的联系方式也变得越来越多样化。譬如在Internet上,有QQ、MSN、微信、微博等网络聊天软件,方便了距离相离很远是人们之间进展交流。刚开场这些软件只是为了方便人们交流而开发的一种娱乐方式,但是随着开展

27、和市场的需求,这些工具的功能多样化使得它们在市场上带来了很多的经济利益,因而使得聊天功能越来越强大。作为一名即将毕业的大学生,可以通过这次的论文设计,稳固自己的C语言和数据构造知识,以及熟悉一个新系统Linu*和Linu*中的命令,socket编程,网络协议,高级网络编程等等,更重要的是锻炼了自己动手编程能力和面对问题怎样去分析和解决的能力。1.3 国外研究现状随着网络的开展,通信网络成为了我们现代社会开展的重要桥梁。最近几年云一说法已经在人们的思想中成为一种定局,不管是有线还是无线,他们之间的网络通信将是人们很关注的问题。由于网络通信的畅通,使得人们彼此之间的通信变得快捷和方便。这是因为人类

28、的需求,国外出现了很多的聊天工具。比方国的QQ和国外的MSN,以及最近很红火的微信和facebook。而对于QQ而言,它是以效劳端作为中继并且接收客户端发来的信息,效劳器总控制客户端,这样客户端之间就可以采用不面向连接的方式进展通信,提高效率。当客户端之间没方法连接时,才由效劳器进展中转通信。在Internet网络上使用TCP/IP协议进展传输,要想客户端与客户端能进展正常的通信,他们彼此要和效劳端先建立起连接,然后通过与效劳器的TCP连接进展中转通信。通过这两个具有代表性的聊天工具,可以看出根据自身情况,国和国外研究的方向是有一定区别的。由于套接字的类型还是比拟多,所以在不同的操作系统中必须

29、要有相应的套接字函数库。除此之外由于不同商家为了获利,生产出各种有竞争的产品,导致市场上出现了不同型号的pc机,并且运用了不同的操作系统,这样就对通信带来了很大的麻烦,所以提出了tcp/ip协议来解决这样的问题。以前几乎所有的套接字都是运用在windows系统下的,但是随着目前全球Linu*系统开发的速度非常的快,使得socket套接字在linu*系统中用的越来越多,其中以美国为首的兴旺国家最为积极。由于linu*在中国是最近几年的新词,所以中国的活泼程度相对还要低很多。尽管活泼度较低,但是linu*下的socket通信在各行各业中迅速成长起来。由于网络的壮大,在Internet上通过网络通信

30、会变得越来越复杂,所以在局域网的通信在*些环境下将更受人们欢送。比方公司和学校的局域网通信,以及在一样局域网的无线快速分配动态ip等。-. z2 需求分析2.1 功能需求该聊天工具是在linu*平台下进展开发与实现的,它适合于局域网所有人进展通信和交流。由于这个系统采用了tcp/ip协议和socket接口,所以主框架采用c/s架构。从总体来讲,该聊天系统主要包含效劳端和客户端。效劳端功能实现模块:保存新用户注册的相关信息(主要是用户名和密码)验证登录用户的信息接收和转发用户聊天信息功能(接收发信用户发来的信息,再将信息转发到收信用户)系统查看在线用户以及剔除指定用户客户端功能实现模块:选择操作

31、模式(注册或者登陆)输入指令进展相应的功能(私聊,群聊,发送文件)客户端接收效劳端的信息,然后通过消息队列发送到display端,让display终端显示出信息容客户端彼此发送文件时,对文件的容进展加密处理前面是效劳端和客户端单独运行模块,下面是效劳端和客户端共同完成通信:客户端向效劳端发送效劳请求,验证用户信息效劳端验证完后向客户端发送响应信息发信客户端向效劳端发送指令信息,请求相应操作效劳端转发信息到收信客户端2.2 性能需求(1) 高效性和可靠性:在一个pc机上一个效劳端和多个客户端同时开启,对pc机cpu性能要求有点高,所以设计的程序应该最大限度的提高系能,减少系统的没有必要的消耗。如

32、果在操作不当,或者由于系统原因,比方端口被占用等,要使程序能够尽量平安的退出。(2) 程序模块兼容性好:对于程序的主框架需要添加各种功能来完善,这必然就会产生模块和主框架之间的融合性,所以在编写程序时,因注意对函数和变量的规。(3) 最后程序应该使每个人都容易理解,并且很容易进展操作。2.3模块划分系统构造图如下: 主模块 私 聊 聊 天 记 录 文件DES加密 群 聊 注 册 登 录 传输文件图2.1 聊天模块划分图2.4 模块调用关系模块在整体框架中的位置如下列图: 未注册用户入口 已注册用户入口 登录文件传输 私聊 文件加密 群聊 聊天信息保存图2.2模块位置关系图2.5 系统总流程图S

33、ocket编程几乎是采用的C/S模式,该模式是基于局域网进展通信的根底架构,它可以使用任何的通信协议,并且在通信的过程中能充分发挥客户端的处理能力,使客户端响应速度加快。所以,该系统总体采用C/S模式。 开场 翻开效劳端,处于监听状态 客户端登陆是否注册 注册否是是客户端之间进展交流私聊群聊发送文件是否加密解密接收正确数据接收错误数据信息保存文件 关闭交流 关闭客户端 关闭效劳端否图2.3 系统总流程图2.6 文件信息平安每天网络中都要进展大量的数据传输,如果对于这些数据的措施没有做好,则将对个人及企业带来很大的麻烦,因此信息平安问题也越来越受到人们的关注,人们希望自己在网络上传输的信息不能被

34、别人查看,特别是一些具有重要资料的文件容。信息的平安关系到人们的利益,所以对文件的容进展保护是十分重要的。而对文件容保护的关键技术就是将文件容在网络传输中进展加密,然后解密。这次对数据的加密,采用的是DES加密算法。DES算法是一种对称算法,采用的是分组数据加密技术,该算法速度快,且能对大量数据进展加密。其DES在设计中的大概原理是,当发送文件客户端发送文件时,先将文件的数据进展加密,然后通过socket套接字发送到接收端,接收端接收到文件,将接收到的文件加密数据进展解密,如果加密密钥和解密密钥完全一样,接收端就能接收发送过来的正确数据,否则就是错误数据。当然这里只是局域网简单的文件数据加密,

35、在现实生活中各种加密遍布生活的每一个角落,比方现在很热点的无线和无线云等都需要各种加密措施保护数据传输。基于这种趋势,加密算法在以后的网络开展中的地位将会一步步的提升。-. z3 linu*网络编程3.1 socket概念及功能(1)概念:我们把socket直接翻译过来的意思就是插座,听起来挺乖僻的,但是它的作用就类似于这个插座的作用。作为了解socket的人都有另一种喊法:套接字。它包含有IP地址和端口号的信息,是通信的必要条件。套接字就是一个文件,是int型数字,它与文件描述符共用一段数值空间0-65535。应用程序中使用套接字来调用套接口,套接字可以认为是指向套接口的指针。Socket是

36、网络传输层供应应用层的编程接口,它提供了许多函数和例程,程序员可以使用它们来开发TCP/IP网络应用程序。套接字归根结底就是文件描述符。使用Socket进展数据传输的简要步骤如下:建立一个Socket,返回该套接字的描述符;按要求配置socket的端口和ip地址,将socket连接到效劳端和客户端;按要求通过socket发送和接收数据;关闭此socket。(2)功能:在Internet上的主机大多数情况都会有很多应用程序,每种应用程序对应着一个效劳相当与就是客户端。每种效劳都翻开一个Socket,并把效劳端和客户端指定绑定到系统中的同一个端口上,而且这个端口必须一样且不能为系统所占用的端口。进

37、程之间的通信需要端点这样的标志,socket就提供了这种标志。所以不同进程之间要通过socket提供的端点才能使进程之间相关联起来进展数据传输。效劳端和客户端的数据通信,我们可以这样理解,就是把客户端套接字里面的容传输到效劳端套接字里面去,两个套接字建立一种关联,该关联应该包含多个元素用来建立多个Socket,使多个客户端与指定的ip和端口号建立联系。这里值得一提的是,socket 是面向客户/效劳器模型而设计的面对不同客户端和效劳端程序提供不同的socket系统调用。Socket实际上是网络传输层和应用层之间的桥梁。客户向核任意请求一个socket,系统会立刻为之分配一个socket号,效劳

38、器拥有全局公认的 socket ,所有在局域网或者在Internet网上的客户端可以进展连接请求。socket利用C/S模式很好地解决了不同进程之间数据传输的问题,所以它可以在本地局域网上进展通信,也可以通过互联网在世界围通信。3.2 socket类型主要有三种类型:流式套接字(SOCK_STREAM):流套接字用在提供面向连接、可靠的数据传输环境中。这种套接字类型能到达数据传输的稳定可靠性。流套接字能够保证数据传输的准确和可靠性,原因在于其使用了TCP协议。 数据报套接字(DGRAM):该类型套接字适用于无连接的环境中。对数据是否成功传达,不做检测,所以数据丧失风险很大,也无法保证顺序地接收

39、到数据。这就是我们所说的udp协议。数据报最大长度为64KB。 原始套接字(SOCK_RAW) :允许对较低层的协议,如IP,ICMP进展直接。用于检验新的协议和效劳中配置的新装备。因此,如果要其他协议发送数据必须使用原始套接字。 3.3 socket函数3.3.1 API功能介绍(1) Socket()作用:向系统注册一个套接字。格式:int socket(int add_f,int mode,int deal)。参数说明:add_f:表示地址族,可以是AF_UNL*和AF_INT。这里我们要使用AF_INT。mode:网络程序所采用的通信协议,可以取SOCK_STREAM或SOCK_DGR

40、AM。其中,SOCK_STREAM说明使用的是TCP协议,提供可靠连接;SOCKE_DGRAM说明使用的是UDP协议,提供不可靠连接。deal:一般默认为0。(2) bind()作用:用来设置名称,具体设置如下:Struct sockaddr_in server_addr;server_addr.sin_family=AF_INET;/协议类型,这里是TCP/IP协议server_addr.sin_port=htons(PORT);/指定端口号 server_addr.sin_addr.s_addr=htonl(INADDR_ANY);/表示任意IP这里有个小知识需要我们关注一下,不然在运行程

41、序时可能报错。问题就是当申明的时候是用的Struct sockaddr,而在使用的时候总是强制转换成struct sockaddr_in。而对于sin_port和sin_addr.s_addr需要转化成网络字节优先顺序。格式:int bind(int b_fd,struct sockaddr *server_addr,int addrlen)。参数说明:b_fd:绑定的套接字符。server_addr:用来存放源主机信息比方IP地址和端口。Addrlen:设置构造大小长度。(3) listen()和accept()作用:监听客户端连接请求,接收客户端请求。格式:int listen(int s

42、, int backlog)。格式:int accept (int s1, void *addr, int *addrlen)。参数说明:s:效劳端监听客户端的套接字符。Backlog:表示接入队列允许的连接数目,大多数系统允许20个,也可以自定义510个。参数说明:s1:效劳端接收客户端的套接字符。Addr:包含主机地址数据的构造。Addrlen:表示地址的长度。(4) connet()作用:将socket连接至serv_addr指定的网络地址。格式:int connect( int sockfd , struct sockaddr *serv_addr , int addrlen)。参数说

43、明:sockfd:客户端的描述符。serv-addr:表示来访目的端口和ip地址套接字的数据构造。Addrlen:表示地址的长度。(5) send()和recv()作用:发送和接收信息。格式:int send (int sockfd, const vod *msg,int len, unsigned int flags)。 int recv (int sockfd 1, void *buf,int len1, usigned int flags)。参数说明:Sockfd:指定写入数据的套接字描述符。Sockfd1:指定读出数据的套接字描述符。Msg:存入写入数据存放的缓冲区。Len:数据长度。

44、Flags:一般设置为0。Buf:读出数据存放的缓冲区。Len1:buf的长度。(6) close() 作用:关闭文件描述符。格式:Close( int sockfd)。参数信息:Sockfd:关闭效劳端或者客户端的描述符。3.3.2 套接口地址构造Linu*中支持很多的套接口地址构造,这里只说明了IPV4套接口地址构造。在这些地址机构中包括了几个很重要的网络信息,它们是:本地主机端口,目的主机端口,通信协议,本地协议地址,目的主机地址。这几个协议在网络连接中起到重要作用。/*用来存储套接字地址*/struct sockaddr unsigned short sa_family; /地址族 c

45、har sa_data14;sa_family一般都是“AF_*的形式,主要用来表示所选的是那种协议。通常大多用的是都是AF_INET,表示TCP/IP协议。sa_data是按照字节存放的,存放的信息只能是字节序转换后的ip地址和端口号。在代码的实现过程中几乎不再用struct sockaddr构造体,而是用struct sockaddr_in构造体来代替。该构造体及与其有关的构造如下:struct sockaddr_in short int sin_family;unsigned short int sin_port; struct in_addr sin_addr;unsigned cha

46、r sin_zero8;struct in_addr unsigned long s_addr;typedef struct in_addr union structunsigned char s_b1,s_b2,s_b3,s_b4; S_un_b;struct unsigned short s_w1,s_w2; S_un_w;unsigned long S_addr; S_un; IN_ADDR;sin_family说明使用的协议,如AF_INIT。sin_port 把转化后的port number存放在其中。sin_addr 把in_addr里面存放的的ip信息转换后存放在其中。sin_z

47、ero通常情况下未使用,如果使用记住用bzero()或memset()函数将其置换为0。3.3.3 根本转换函数(1) 网络字节顺序在每一个pc机上对变量的字节顺序存储不同,也就是我们所谓的大端字节序(低地址放高位数据,高地址放地位数据)和小端字节序(低地址放低位数据,高地址放高位数据)。由于IP地址是按照网络字节序存放的, Internt上数据以大端字节序在网络上传输,但是在部是小端字节序存放的,所以在Internet上传输数据时需要对数据进展字节序转换,否则系统无法自动识别获取数据。(2) 具体转化函数Ntons:将网络字节顺序转换成unsigned short 型数据。Htons:将主机

48、 unsigned short 型数据转换成网络字节顺序。Htonl:将主机 unsigned int 型数据转换成网络字节顺序。Ntohl:将网络字节顺序转换成unsigned int型数据。3.3.4 socket编程流程本次设计中网络编程采用的是c/s架构,即一个效劳端和客户端端。由于套接字之间的API存在着一定的相关联,所以套接字之间的流程主要可以分为三个步骤:效劳端处于监听状态,客户端发送请求,连接成功并通信。详细的过程为首先效劳端调用socket函数创立一个套接字,然后把协议,端口号,ip信息通过bind函数进展绑定。以上操作完后效劳端就开场监听客户端的请求,并设置监听的最大数目。

49、当客户端发送请求时,效劳端就调用accept函数承受客户端的请求。然后对于客户端来说,也是要先调用socket函数创立客户端的套接字,这里是用的tcp协议,所以可以不用bind函数。接着调用connect函数与效劳端建立连接。当效劳端和客户端建立连接时,可以通过彼此之间的套接字描述符来进展数据传输。其中一方通过send函数把数据写入数据缓冲区,有TCP层负责写向网络层进展传输,另一方通过recv函数从缓冲区读出数据,这样就完成了效劳端与客户端之间的数据传输。当双方数据传输完成后,由函数close关闭各自的套接字,使客户端和效劳端通信中断。具体流程图如下:Socket()创立套接字Socket(

50、)创立套接字Bind()配置本地端口和ipBind()配置本地端口和ipListen()监听和接收请求Accpet()接收请求和建立连接Connect()与效劳器连接Recv()h和send()接收和发送信息Send()和recv()发送和接收信息Close()关闭套接字Close()关闭套接字效劳端 客户端图3.1 socket流程图3.4 TCP/IP协议3.4.1 OSI概述 1、OSI功能描述:我们清楚的了解到OSI并不是一个网络构造,因为它没有定义每个层拥有的具体效劳和协议,它只告诉我们每一层该做什么样的工作。但是ISO为所有层提供了标准,每个标准都有自己部的标准协议。由于OSI参考

51、模型过于复杂,现在流行的因特网体系已经不再使用OSI的表示层和会话层,但是这里还是需要介绍一下OSI模型及其七层层次构造。OSI即开放式通信系统互联参考模型(Open System Interconnection,OSI/RM,Open Systems Interconnection Reference Model),是国际标准化组织(ISO)提出的一个试图使各种计算机在世界围互连为网络的标准框架,简称OSI。 OSI拥有7个层次如下:(1)应用层:为应用软件提供接口,使应用程序能够使用网络效劳。(2)表示层:标准化此层以下各层所传递的信息。(3)会话层:允许不同机器上的用户之间建立会话。(4

52、)运输层:负责建立端到端的连接,保证报文在端到端之间的传输。主要包括TCP和UDP传输。(5)网络层:负责将分组数据从源端传输到目的端,为网络设备提供逻辑地址,进展路由选择、分组转发。(6)数据链路层:在不可靠的物理链路上,提供可靠的数据传输效劳,把帧从一跳结点移动到另一跳结点。此层包括组帧、物理编址、流量控制、过失控制、接入控制。物理层:把数据链路层传来的帧转换为比特流进展传输。 2、OSI 七层体系构造OSI体系构造图如下:面向应用层应用层表示层会话层传输层面向数据传输网络层数据链路层物理层图 3.2 OSI七层构造3.4.2 TCP/IP 协议概述 1、TCP/IP定义TCP/IP全称“

53、Transport Control Protocol/Internet Protocol,即传输控制协议/网际协议。是国际互联网Internet采用的协议标准。TCP/IP协议早期用于ARPANet网络,后来开放后用于民用,诞生了Internet。TCP/IP是一种异构网络互连的通信协议,它实现了不同网络之间的互相通信。同样在局域网的不同网络也是适合的。运行TCP/IP协议的网络是一种采用包或称分组交换的网络。TCP/IP协议是用100多种协议组成的协议栈。TCP协议:传输控制协议,在TCP/IP体系构造中属于传输层,它提供全双工的和可交付的效劳。要注意的是TCP协议是面向字节的。IP协议:互

54、联网络协议,在TCP/IP体系构造中属于网络层,提供数据包协议的效劳,负责网际主机间无连接、不纠错的网际寻址及数据包传输。 2、TCP/IP工作原理(1) 首先源主机通过应用层效劳如fttp等效劳将一串字节流传给传输层;(2) 传输层将字节流分成TCP段,加上TCP交给互联网络IP层;(3) IP层生成一个包,将TCP段放入其数据域,并加上源和目的主机的IP地址,然后交给数据链路层;(4) 数据链路层在其帧的数据部封装IP包,发往目的主机或IP路由器,在应用层就加上应用程序的头,如FTP,HTTP等,在传输层就加上TCP或UDP头,在网络层就加上IP头,在物理层就加上以太帧头;(5) 目的主机

55、上接收到数据后,由数据链路层将数据链路层帧头去掉,又把IP包交给互联网层;(6) IP层就进展IP检查,如果中的校验和与计算出来的不一致,说明该ip数据包有问题,应该丢弃该ip数据包;(7) 如果校验和一致,IP层去掉IP头,将TCP段交给TCP层,TCP层检查顺序号来判断是否为正确的TCP段;(8) TCP层为TCP计算TCP头和数据。如果不正确,TCP层丢弃这个包,假设正确,则向源主机发送确认;(9) 在目的主机上,TCP层去掉TCP头,将字节流传给应用程序;(10) 目的主机收到了自源主机发来的字节流,这样就进展了网络上不同网络之间的数据传输。 3、TCP报文格式(1)源端口和目标端口:

56、各占两个字节,存放接收双方的端口号信息。用于发送端与接收端的进程,这两个值加上IP首部的源端IP地址和目的端IP地址唯一确定一个TCP连接。(2)序号:占4字节,对tcp流中的每一个数据字节进展编号。(3)首部长度:表示TCP报文首部信息的长度即包含多少个32位的字。由于首部可能含有选项容,因此TCP首部的长度是不确定的,但是TCP首部最多60个字节。首部长度的单位是32比特或4个八位组。首部长度实际上也指示了数据区在报文段中的起始偏移值。码元比特:6比特 URG、ACK、PSH、RST、SYN、FIN。URG如果URG=1表示紧急指针字段有效;ACK如果ACK=1表示确认号字段有效;PSH表

57、示带有PUSH标志的数据;RST置位表示复位比特;SYN用于建立TCP连接时同步序号;FIN用于释放TCP连接时标识发送方比特流完毕(4)窗口:占2字节,用来控制对方发送的数据量,流量控制原理就是这里。(5)紧急指针:表示紧急数据在当前数据段中的位置,是一个相对于当前序列号的字节偏移值。(6)校验和:与UDP校验和计算方法一样,同样需要包含伪首部。伪首部中的协议类型值为6。(7)选项:长度是可以改变的,用于TCP连接双方在建立连接时协商最大的报文段长度MSSMa*imum Segment Size。(8)填充:32位pc机上需要字节对齐,这里就用0来填充数据。表3.1 tcp头报文格式0 15

58、 16 3116位源端口号16位目的端口32位序号32位确认序号4位首部长度6位(保存)URGACKPSHRSTSYNFIN16位窗口大小16位检验和16位紧急指针选项数据3.4.3 TCP/IP层次构造 1、应用层application layer该层包含了所有的高层协议,对于不同的网络层应用引用不同的网络应用协议。如HTTP、FTP、telnet、SMTP、DNS、SNMP等协议。 2、传输层transport layer负责在源主机和目的主机的应用程序间提供端到端的数据传输效劳。主要有TCP和UDP两个传输协议。TCP协议是一个面向连接的、可靠的协议,UDP协议是不可靠、无连接的协议。

59、3、网络层internet layer在源主机和目的主机之间进展数据传输,主要解决路由选择、拥塞控制和网络互联等问题。如最重要的协议是IP。 4、网络接口层network access layer(物理层)负责将IP分组封装成帧格式转换成比特流在以太网中进展传输,或者将数据帧转换成数据包交给网络层进展传输。TCP/IP层次构造如下列图:目的主机源主机应用层应用层数据流传输层传输层数据包UDP或TCP网络层网络层IP数据报物理层物理层网络帧数据链路层图3.3 TCP/IP五层构造3.4.4 TCP通信TCP是传输控制协议的简称,它提供一条全双工的、可靠的信道。TCP提供面向连接可靠的效劳。至于连

60、接就是要在传送数据之前先要建立连接,数据传送完毕后要释放连接。TCP不提供播送和多播效劳。由于TCP要提供可靠的、面向连接的运输效劳,所以不可防止地增加了许多系统开销,比方拥塞控制、流量控制、重传机制等都需要占用许多系统的时空资源。 两个计算机之间如果使用TCP通信,其连接过程需要三次握手实现,第一次握手:客户端发送syn包(syn=k)到效劳器,并进入SYN_SEND状态,等待效劳器确认;第二次握手:效劳器收到syn包,必须确认客户的SYNack=m+1,同时自己也发送一个SYN包syn=m,即SYN+ACK包,此时效劳器进入SYN_RECV状态;第三次握手:客户端收到效劳器的SYNACK包

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论