1、I linux TCP 服务器/客户端通信程序 摘要:随着计算机网络的不断发展,网络编程变得越来越重要,除了简单的 WEB 编程外,还包括利 用套接字(Socket)进行客户/服务器应用程序的设计。本文先对与套接字相关的概念和函数作了一 般性介绍,并提出多线程的编程方法和设计流程,也就具体的工程实例进行了流程分析。本文中, 对计算机的网络模型进行了简要的分析,并对 TCP 的握手模型进行了概述;在多线程编程中,本文 详细分析了多线程的互斥模型,讲解了多种线程之间的同步方法,并在程序设计中得到体现,详细 讲述了 Linux 中的 TCP 服务器/客户端通信程序,并对结果进行了验证。 关键字:网络
2、编程 ;多线程;套接字 II 目 录 绪论 1 1. 课程背景 1 2. 选题的目的和意义 1 3. 国内外研究现状 1 4. 主要研究内容 1 第 1 章 需求分析 3 1.1 设计目的 .3 1.2 课题要求 .3 1.3 任务分析 .3 第 2 章 环境搭建 4 2.1 Ubuntu 系统安装 4 2.2 开发环境搭建 .7 2.2.1 NFS 环境介绍 .7 2.2.2 NFS 安装 .7 2.2.3 挂载 NFS 文件系统 .7 2.2.4 交叉工具安装 .8 第 3 章 软件设计 9 3.1 TCP/IP 协议 9 3.1.1 网络模型 .9 3.1.2 TCP 连接 .9 3.2
3、 多线程编程 10 3.3 Socket 网络编程模型 .12 3.3.1 TCP Server 编程模型 .12 3.3.2 TCP Client 编程模型 .13 3.4 程序设计 13 3.4.1 主要内容 13 III 3.4.2 服务器端程序设计 14 3.4.3 客户端程序设计 16 第 4 章 综合测试 .18 4.1 功能测试 18 第 5 章 结论 . 20 参考文献 . 21 附录一 服务器端程序 . 22 附录二 客户端程序 . 31 1 绪论 Linux 经历了 20 多年的发展,已经成为了一个功能强大而稳定的操作系统,在嵌入式系统中也 得到广泛的运用,伴随着物联网技术
4、的普及,网络通信在嵌入式系统中扮演着举足轻重的作用。 1. 课程背景 随着时代的发展,网络通信在我们的生活中愈来愈重要,在互联网技术基础上延伸和扩展来的 物联网技术,正逐渐改变着我们的世界。互联网在现实生活中的应用很广泛,互联网给我们的现实 生活带来了很大的方便;互联网是全球性的,这也就意味着我们能够打破时空的界限,通过互联网 接触到世界的每一个角落;因为互联网的强大力量,这个时代的文明发展得到极大地提高。 2. 选题的目的和意义 由于互联网超乎寻常的强大力量,改变了这个时代的交流方式,改变着人们的生活,未来,我 们还将在互联网领域得到更多的进步,会影响生活中的方方面面。 3. 国内外研究现状
5、 互联网从诞生至今,让人类文明得到巨大的推动,伴随着互联网的发展,各种依托互联网的技 术得到迅速发展,Linux 操作系统依据其优良的性能和网络功能,在各个领域都得到极大的普及。 21 世纪,是互联网发展的有一个阶段,我们国家已经将互联网的发展提升到了战略高度,明确表示 要建成互联网强国,我国到目前为止,已经诞生了一大批优秀的互联网企业,全世界都将在互联网 的推动下,进入一个全新的时代。 4. 主要研究内容 设计 TCP 服务器程序,使用多线程实现”生产者-消费者“模型,建立 TCP 服务器,响应客户端 请求,发送客户端指定的请求数据。 主要包括以下内容: (1) 创建线程持续产生数据,数据包
6、含(学号,姓名(拼音),年龄,身高,体重,当前系统 时间(纳秒数)使用 gettimeofday(),可使用队列/多维数组存储数据; (2) 创建 TCP 服务器线程, 响应多个客户端的连接, 读取队列/数组, 向客户端发送指定 “学号” 的数据。设计 TCP 服务器程序; 2 (3) 创建 TCP 客户端接收线程,连接服务器并请求指定“学号”的数据,接收数据并存储在文 件中。要求存储有意义的数据,由于 TCP 是基于字节流的特征,需要做组包处理; 3 第1章 需求分析 1.1 设计目的 通过对专业知识的熟练运用,理解 Linux 网络编程的流程,了解互联网的基本架构,熟悉多线 程编程的思想。同时,通过本课程设计,可以培养以下能力: (1) 独立工作能力与创造力; (2) 综合运用专业及基础知识的能力; (3) 解决实际工程技术问题的能力; (4) 查阅图书资料、产品手册和各种工具书的能力; (5) 书写技术报告和编制技术资料的能力。 1.2 课题要求 使用多线程实现”生产者-消费者“模型,建立 TCP 服务器,响应客户端请求,发送客户端指 定的请求数据。 1.3 任务分析 创建线程持