1、2基于LinuxTCP通信服务器端实现2.1设计要求大家好,今天,和教研室老师商议了一下题目,认为你们组这个题目有点难度,而且时间比较短,用LINUX可能会比麻烦,一是它使用vi命令比较复杂,另外编译环境安装也比较麻烦费时,而我们每个老师要带4个组没有太多时间,这周我们又要内审检验考试卷子,所以现在更改一下设计内容,不要求在Linux下做了,能够在windows环境下来做,多线程服务器端,用C+语言或JAVA语言。这么全部做好了,假如有时间再熟悉一下Linux环境,等以后毕业设计时候再实现Linux下服务器。不知道你们想法怎样?也不知道你们以前是否有熟悉Linux?如有什么问题请随时跟我联络。
2、2.1.1设计目标在linux环境下,掌握TCP通信服务器端实现方法。2.1.2基础功效要求和设计目标(1)能够侦听用户端连接请求;(2)建立独立数据通信链路;(3)在通信两端建立对等通信协议;(4)完成数据包收发和存放;2.1.3扩展功效实现视频监控数据采集和控制命令收发。2.2参考示例2.2.1案例说明(1)TCP三次握手机制为实现服务器端TCP通信功效,服务器端需要能够接收多个用户端通信请求,并建立多条TCP通信链路。TCP连接建立叫做三次握手。用户端发送一个带SYN标志TCP报文到服务器。这是三次握手过程中报文1。服务器端回应用户端,这是三次握手中第2个报文,这个报文同时带ACK标志和
3、SYN标志。所以它表示对刚才用户端SYN报文回应;同时又标志SYN给用户端,问询用户端是否准备好进行数据通讯。用户必需再次回应服务段一个ACK报文,这是报文段3,图1。数据传输是在连接建立后,双向数据传送就能够开始。用户和服务器全部能够在两个方向传送数据和确定。图1 TCP协议建立连接三次握手过程(2)套接字(Sockets)概念Windows下网络编程规范Windows Sockets是Windows下得到广泛应用、开放、支持多个协议网络编程接口。Socket又称套接字,是进程之间通信抽象连接点。能够经过一个形象例子来了解这个概念,现实生活中电话是大家联络常见工具,双方只要使用两部电话机就能
4、够交谈。在计算机世界中,两个程序就是使用Socket 进行通信,一个Socket就好比一部电话机,两个程序在网络上经过一个双向链路进行通信,这个双向链路每一端就成为一个Socket。进程之间要通信,首先要建立各自Socket,就像要打电话一定要先有电话机一样,打电话时每部电话机全部能够说和听。和这类似,每个Socket 也全部能够进行读写操作,读写操作时分别要用到Socket中输入流和输出流。建立连接后,用户程序能够向Socket里写入请求,然后服务器会处理这个请求,并把处理结果经过Socket送回。服务器应用程序通常监听一个特定端口以等候一个用户连接请求,当一个连接请求抵达时,用户和服务器建
5、立一个通信连接。在连接过程中,用户被分配一个当地端口号而且和一个Socket连接,用户经过写Socket来通知服务器,经过读Socket来获取信息。类似地,服务器也获取一个当地端口号,它需要一个新端口号来监听原始端口上其它连接请求。服务器也给它当地端口连接一个Socket,读写来自用户请求。依据网络通信特征,套接字可分为两类:流套接字和数据报套接字。 流套接字流套接字提供双向、有序、无反复而且无统计边界数据流服务,它适适用于处理大量数据。网络传输层能够将数据分散和集中到适宜尺寸数据包中。流套接字是面向连接,通信双方进行数据交换之前,必需建立一条路径,这么既确定了它们之间存在路由,又确保了双方全
6、部是活动、可相互响应,但通信双方之间建立一个通信信道需要很多开支。除此以外,大部分面向连接协议为确保发送无误,可能会需要实施额外计算机来验证正确性,所以会深入增加开支。数据报套接字数据报套接字支持双向数据流,但并不确保数据传输可靠性、有序性和无反复性。也就是说,一个从数据报套接字接收信息进程有可能发觉信息反复,或和发出时次序不一样情况。另外,数据报套接字一个关键特点是它保留了统计边界。对于这一特点,数据报套接口采取了和现在很多包交换网络(比如以太网)很类似模型。数据报套接字是无连接,它不确保接收端是否正在侦听,类似于邮政服务:发信人把信装入邮箱即可,至于收件人是否能收到这封信或邮局是否能按时将
7、信件投递到收件人处等,发件人全部不得而知。所以,数据报并不可靠,需有程序员负责管理数据报排序和可靠性。应用程序通常仅在同一类套接口间通信。不过只要底层通信协议许可,不一样类型套接口也照样能够通信。本设计采取面向连接TCP协议,所以使用流套接字。(3)用户机/服务器模型TCP/IP协议应用关键工作模式是用户机/服务器模式(Client/Server,简称C/S模式)。在两个不一样进程通信过程中,一方发出服务请求,一方提供服务,通常称它们为“用户进程”和“服务进程”。显然,两个进程之间通信实际上是基于通信协议进程同时过程,服务进程作为自愿提供者,为众多主机上用户进程提供服务。服务进程要先于用户进程
8、开启,在某一确定网络地址(IP地址+端口号)等候用户进程请求,如有请求抵达,服务进程采取某种方法(并发服务或反复服务),直到用户进程关闭,然后服务进程继续等候下一个请求服务进程。服务器通常采取并发服务方法。所谓并发服务,就是服务进程在有用户请求到来时,激活新进程来专门为此用户请求提供服务,并在用户终止请求后杀死该进程,和此同时,原先进程能够继续在原来端口等候下一个用户连接。Socket编程接口为新请求创建一个专门“数据套接字”,并发服务器依据该套接字创建专门服务进程。并发服务最大优点是能立即对应请求,即使创建新进程会增加系统开销。和此相对应是反复服务,它利用“数据套接字”,在监听进程上直接进行
9、服务。需要说明是,两种类型Socket(SOCK_STREAM和SOCK_DGRAM)工作步骤是不一样,分别图2和图3所表示。创建流失套接字S关闭套接字S,停止服务接收用户连接,创建数据套接字ns利用ns和用户进程通信,提供服务(是否激活新进程依靠服务器类型而定)关闭ns,若是并打服务,还需要退出该进程将S和当地地址和端口绑定创建流套接字cs监听,等候连接请求利用cs和远程服务器建立连接利用cs和服务器进程通信,完成数据传输关闭套接字cs,结束TCP会话用户机建立连接请求/应答服务器图2流套接字服务工作步骤示意图创建数据报套接字S将S和当地地址和端口绑定对应用户请求,完成数据传输关闭套接字S,
10、停止服务创建流套接字cs利用cs和远程服务器建立连接利用cs和服务器进程通信,完成数据传输关闭套接字cs,结束UDP会话用户机服务器图3数据报套接字服务工作步骤示意图2.2.2网络结构设计(1)网络拓扑结构采取星型连接。(2)使用10/100Mbps网卡。(3)软件实现编程语言采取C语言,利用socket进行通信。(4)开发平台linux。因为linux能够提供强大网络支持,和安全特征,目前主流服务器端全部采取linux平台构筑。2.2.3软件设计设计步骤图:图4 软件步骤图(1)建立一个用于侦听socket,一直在端口进行侦听。(2)当有用户端发出链路请求,侦听链路接收,而且建立数据链路,在
11、独立线程进行数据通信。(3)拆分通信数据包,数据包最大长度为1KB,在每个数据包包头1个字节,用于描述数据包序号,循环计数。也就是说,包头第一个数据依次为0,1,2.255,超出255后,从0开始重新计数。(4)接收数据,写入文件,每个文件最大长度上限为1MB。2.2.5参考程序清单2.2.6测试方法1.使用用户端和服务器端进行联机,确定收发数据正确;2.在服务器端,使用TCPDUMP截获数据进行分析,确保数据正确。2.2.7思索和提升TCP通信是提供多个网络通信基础,掌握TCP通信原理,和了解TCP通信三次握手通信协议,就能为提供多种网络服务提供支持,比如,多种监控视频数据网络传输,提供网络打印服务等等。这些应用能够在此基础上进行拓展。此次设计仅简单实现了TCP通信最基础通信和数据处理,在未来设计中,以下方面能够进行完善。诸如:会话层数据协议,程序排错机制,数据存放备份机制等。