成都学院(成都大学)课程设计报告IlinuxTCP服务器/客户端通信程序摘要:随着计算机网络的不断发展,网络编程变得越来越重要,除了简单的WEB编程外,还包括利用套接字(Socket)进行客户/服务器应用程序的设计。本文先对与套接字相关的概念和函数作了一般性介绍,并提出多线程的编程方法和设计流程,也就具体的工程实例进行了流程分析。本文中,对计算机的网络模型进行了简要的分析,并对TCP的握手模型进行了概述;在多线程编程中,本文详细分析了多线程的互斥模型,讲解了多种线程之间的同步方法,并在程序设计中得到体现,详细讲述了Linux中的TCP服务器/客户端通信程序,并对结果进行了验证。关键字:网络编程;多线程;套接字成都学院(成都大学)课程设计报告II目录绪论.............................................................................11.课程背景.....................................................................12.选题的目的和意义.............................................................13.国内外研究现状...............................................................14.主要研究内容.................................................................1第1章需求分析..................................................................31.1设计目的....................................................................31.2课题要求....................................................................31.3任务分析....................................................................3第2章环境搭建..................................................................42.1Ubuntu系统安装..............................................................42.2开发环境搭建................................................................72.2.1NFS环境介绍...........................................................72.2.2NFS安装...............................................................72.2.3挂载NFS文件系统......................................................72.2.4交叉工具安装..........................................................8第3章软件设计..................................................................93.1TCP/IP协议..................................................................93.1.1网络模型..............................................................93.1.2TCP连接...............................................................93.2多线程编程.................................................................103.3Socket网络编程模型.........................................................123.3.1TCPServer编程模型...................................................123.3.2TCPClient编程模型...................................................133.4程序设计...................................................................133.4.1主要内容.............................................................13成都学院(成都大学)课程设计报告III3.4.2服务器端程序设计.....................................................143.4.3客户端程序设计.......................................................16第4章综合测试....................................................................184.1功能测试...................................................................18第5章结论.....................................................................20参考文献........................................................................21附录一服务器端程序.............................................................22附录二客户端程序...............................................................32成都学院(成都大学)课程设计1绪论Linux经历了20多年的发展,已经成为了一个功能强大而稳定的操作系统,在嵌入式系统中也得到广泛的运用,伴随着物联网技术的普及,网络通信在嵌入式系统中扮演着举足轻重的作用。1.课程背景随着时代的发展,网络通信在我们的生活中愈来愈重要,在互联网技术基础上延伸和扩展来的物联网技术,正逐渐改变着我们的世界。互联网在现实生活中的应用很广泛,互联网给我们的现实生活带来了很大的方便;互联网是全球性的,这也就意味着我们能够打破时空的界限,通过互联网接触到世界的每一个角落;因为互联网的强大力量,这个时代的文明发展得到极大地提高。2.选题的目的和意义由于互联网超乎寻常的强大力量,改变了这个时代的交流方式,改变着人们的生活,未来,我们还将在互联网领域得到更多的进步,会影响生活中的方方面面。3.国内外研究现状互联网从诞生至今,让人类文明得到巨大的推动,伴随着互联网的发展,各种依托互联网的技术得到迅速发展,Linux操作系统依据其优良的性能和网络功能,在各个领域都得到极大的普及。21世纪,是互联网发展的有一个阶段,我们国家已经将互联网的发展提升到了战略高度,明确表示要建成互联网强国,我国到目前为止,已经诞生了一大批优秀的互联网企业,全世界都将在互联网的推动下,进入一个全新的时代。4.主要研究内容设计TCP服务器程序,使用多线程实现”生产者-消费者“模型,建立TCP服务器,响应客户端请求,发送客户端指定的请求数据。主要包括以下内容:(1)创建线程持续产生数据,数据包含(学号,姓名(拼音),年龄,身高,体重,当前系统时间(纳秒数)使用gettimeofday(),可使用队列/多维数组存储数据;(2)创建TCP服务器线程,响应多个客户端的连接,读取队列/数组,向客户端发送指定“学号”的数据。设计TCP服务器程序;成都学院(成都大学)课程设计2(3)创建TCP客户端接收线程,连接服务器并请求指定“学号”的数据,接收数据并存储在文件中。要求存储有意义的数据,由于TCP是基于字节流的特征,需要做组包处理;成都学院(成都大学)课程设计3第1章需求分析1.1设计目的通过对专业知识的熟练运用,理解Linux网络编程的流程,了解互联网的基本架构,熟悉多线程编程的思想。同时,通过本课程设计,可以培养以下能力:(1)独立工作能力与创造力;(2)综合运用专业及基础知识的能力;(3)解决实际工程技术问题的能力;(4)查阅图书资料、产品手册和各种工具书的能力;(5)书写技术报告和编制技术资料的能力。1.2课题要求使用多线程实现”生产者-消费者“模型,建立TCP服务器,响应客户端请求,发送客户端指定的请求数据。1.3任务分析创建线程持续产生数据,数据包含(学号,姓名(拼音),年龄,身高,体重,当前系统时间(纳秒数)使用gettimeofday),可使用队列/多维数组存储数据。理解常用的数据结构,熟练掌握C编程语言。创建TCP服务器线程,响应多个客户端的连接,读取队列/数组,向客户端发送指定“学号”的数据,设计TCP服务器程序,掌握网络编程中服务器端的编程流程。创建TCP客户端接收线程,连接服务器并请求指定“学号”的数据,接收数据并存储在文件中。要求存储有意义的数据,由于TCP是基于字节流的特征,需要做组包处理。掌握网络编程中客户端的编程流程。最终的目的是熟练掌握网络编程的编程方法,理解常用的数据结构的基本思想,掌握编程语言,理解多线程编程在实际工程中的应用。成都学院(成都大学)课程设计4第2章环境搭建2.1Ubuntu系统安装考虑到Windows系统的普及程度,本课程实际将利用虚拟机来进行开发,首先我们需要搭建虚拟机开发环境。1.创建虚拟机图2.1.12.选择操作系统图2.1.2成都学院(成都大学)课程设计53.配置处理器和内存图2.1.3图2.1.4成都学院(成都大学)课程设计64.安装系统图2.1.55.安装成功界面图2.1.6成都学院(成都大学)课程设计72.2开发环境搭建2.2.1NFS环境介绍NFS(NetworkFileSystem)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。2.2.2NFS安装1.NFS是网络文件系统系统的缩写,可以用于Linux和Linux之间传递文件,实现数据共享。安装命令如下:apt-getinstallnfs-kernel-server2.修改配置文件打开/etc/exports文件,增加mount-tnfs/NFS(rw,sync,no_root_squash,no_subtree_check)开发板和其他Linux主机可以通过网络访问/NFS目录。3.启动NFSsudoservicerpcbindstartsudoservicenfs-kernel-serverstart2.2.3挂载NFS文件系统mount-tnfs-ointr,nolock,rsize=1024,wsize=1024192.168.1.86: