版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第二章是TCP网络编程的基础。TCP协议是TCP/IP协议中的一个重要协议,由于其传输的稳定性,在许多程序中得到了应用。例如,超文本传输协议、文件传输协议和其他协议都是建立在传输控制协议的基础上的。本章介绍了TCP套接字编程的基础知识,主要包括以下内容:套接字编程的基础知识,套接字编程中常用的套接字地址结构,以及内核和应用层之间的内存数据传输方式。在TCP网络编程的流程部分,简要介绍了TCP套接字服务器和客户端的编程框架,并介绍了socket()、bind()、listen()、accept()、connect()、close()函数,以及如何使用read()和write()函数读取和发送数据
2、。2.1套接字编程的基本知识。在进行套接字编程之前,您需要知道基本的数据结构。本部分详细介绍了套接字地址结构的定义形式,如何使用套接字地址结构,并简要介绍了Linux操作系统中用户空间和用户空间的交互过程。用户对网络编程的方法有深刻的理解。2.1.1套接字地址结构,套接字编程需要指定套接字的地址作为参数,并且不同的协议家族有不同的方式来定义地址结构。这些地址结构通常以sockaddr_开头,每个协议系列都有一个唯一的后缀。例如,对于以太网,它的结构名是sockaddr_in。1一般套接字数据结构2实际套接字数据结构3 sockaddr结构和sockaddr_in结构之间的关系,2.1.1套接字
3、地址结构,2.1.2用户层和内核层之间的交互过程,套接字参数的一些参数需要由用户传入,这些参数用于与Linux内核通信,例如指向地址结构的指针。通常采用内存复制的方法。例如,bind()函数需要传入地址结构sockaddr *my_addr和my_addr来指向参数的长度。1向内核发送数据的交互过程,2从内核发送数据的交互过程,2.1.2用户层和内核层之间的交互过程,2.2 TCP网络编程过程,TCP网络编程是目前常用的方式,例如,许多广泛使用的协议如HTTP协议和FTP协议都是基于TCP协议的。TCP编程主要是C/S模式,即服务器和客户端模式。TCP网络编程的流程包括两种模式:服务器和客户端
4、。这两种模式的编程流程有很大的不同。2.2.1 TCP网络编程架构,TCP网络编程有两种模式,一种是服务器模式,另一种是客户端模式。服务器模式创建一个服务程序,等待客户端用户的连接,并在收到用户的连接请求后,根据用户的请求进行处理;客户端模式根据目标服务器的地址和端口进行连接,向服务器发送请求,并处理服务器响应的数据。1服务器的编程模式2客户端的编程模式3客户端和服务器之间的交互过程,2.2.1 TCP网络编程架构,2.2.2创建网络套接字函数socket(),以及套接字系统调用网络编程中的函数socket()来获取文件描述符。1函数套接字()介绍了2应用层函数套接字()和内核函数之间的关系,
5、2.2.2创建网络套接字函数套接字(),2.2.3绑定地址端口对绑定(),在成功创建套接字文件描述符后,有必要在接收和发送数据之前将套接字绑定到地址和端口。1函数绑定()介绍了函数绑定()的两个示例;3应用层绑定()函数和内核函数之间的关系;2 . 2 . 3绑定地址端口对绑定(),2.2.4侦听本地端口侦听;7 . 2 . 1小节简要介绍了服务器模式。有两种服务器模式:监听()和接受()函数监听()用于初始化服务器可连接队列。当服务器处理客户端连接请求时,它会按顺序处理它们,同时只能处理一个客户端连接。当来自多个客户端的连接请求同时到来时,服务器不会同时处理它们,而是将来自客户端的无法处理的
6、连接请求放入等待队列。这个队列的长度由listen()函数定义。1函数侦听()介绍了函数侦听的两个示例()应用层侦听()函数和内核函数之间的关系,2.2.4侦听本地端口侦听,2.2.4侦听本地端口侦听,2.2.5接受网络请求接受(),当客户端的连接请求到达服务器主机侦听端口时,此时客户端的连接将在队列中等待。函数接受()成功执行后,它将返回一个新的windows套接字文件描述符来表示客户端的连接,客户端连接的信息可以通过这个新的描述符获得。因此,当服务器成功处理客户机的请求连接时,将会有两个文件描述符,旧的文件描述符指示被监视的套接字,新生成的文件描述符指示客户机的连接,函数send()和re
7、cv()通过新的文件描述符发送和接收数据。1函数accept()介绍了函数accept()的两个例子;3应用层accept()函数与内核函数之间的关系;2 . 2 . 6连接到目标网络服务器connect(),客户端建立套接字后,无需地址绑定就可以直接连接到服务器。连接服务器的功能是connect(),它使用指定的参数(如IP地址、端口等)连接服务器。1函数连接()介绍了一个2函数连接3应用层连接()函数和内核函数之间关系的例子,2.2.6连接到目标网络服务器连接(),2.2.6连接到目标网络服务器连接(),2.2.7写数据写(),如图7-5所示,当服务器接收到一个客户端连接时,它可以使用套接
8、字描述符。写入套接字的形式和过程与普通文件的操作模式一致。内核将根据文件描述符的值找到相应的属性,当它是一个套接字时,它将调用相应的内核函数。以下是将数据写入套接字文件描述符的示例。缓冲区数据中的所有数据都被写入套接字文件描述符,返回值是成功写入数据的长度。int大小;char data1024size=写(s,数据,1024);2.2.8读取数据读取(),类似于写入数据,使用read()函数从套接字描述符中读取数据。当然,在读取数据之前,必须建立和连接套接字。读取数据的方法如下:从套接字描述符中读取1024字节,并将其放入缓冲区数据,大小变量的值是成功读取的数据的大小。int大小;char
9、data1024size=read(s,data,1024);2.2.9关闭插座关闭()和关闭插座连接可以通过使用关闭()功能来实现。功能是关闭开放的套接字连接,内核将释放相关资源。关闭套接字后,套接字文件描述符不能用于读写操作。第三章介绍了功能原型。功能关闭()可以使用更多方式来关闭连接,从而允许单向或双向切断通信。该函数的原型如下:第一个参数S是用于切断通信的windows sockets文件描述符,第二个参数how表示切断通信的方式。#包括int关闭(int s,int how);2.2.9封闭套接字(),2.3服务器/客户端的简单示例。在前几节中介绍了网络编程的功能。本节介绍一个基于T
10、CP协议的服务器/客户端的简单示例。通过理解本例中的代码和程序构建过程,读者可以对基于TCP协议的服务器和客户端的设计方法和流程有一个基本的了解,并可以进一步编写自己的程序。2.3.1示例功能描述,示例程序分为服务器和客户端。客户端连接到服务器后,从标准输入中读取输入字符串并将其发送到服务器;服务器收到字符串后,将收到的字符串总数发送给客户端;客户端将接收到的服务器信息打印到标准输出中。,2.3.2服务器网络程序,程序代码如下,程序根据网络流量建立套接字,初始化并绑定网络地址,设置监听队列长度,接收客户端连接,发送和接收数据,关闭套接字。1初始化工作,2建立套接字,3设置服务器地址,4将地址绑
11、定到套接字描述符,5设置侦听队列,6主循环进程,2.3.3服务器读取并显示字符串,服务器处理客户端连接如下:首先读取从客户端发送的数据,然后将接收到的数据数量发送给客户端。void process _ conn _ server(int s)ssize _ t size=0;char buffer1024对于(;)大小=读取(s,缓冲区,1024);如果(size=0)返回;sprintf(缓冲区,%d字节altogethern,大小);写入(s,缓冲区,strlen(缓冲区)1);2.3.4客户端的网络程序非常简单。建立流套接字后,将服务器的地址和端口绑定到套接字描述符。然后连接到服务器并进
12、行处理。最后,关闭连接。2.3.5客户端读取并显示字符串,客户端从标准输入中读取数据并将其发送到服务器。然后从服务器读取响应,并将数据发送到标准输出。void process _ conn _ client(int s)ssize _ t size=0;char buffer1024对于(;)size=read(0,缓冲区,1024);如果(大小0)写入(s,缓冲区,大小);size=read(s,缓冲区,1024);写(1,缓冲区,大小);2.3.6编译并运行程序,将服务器的网络程序保存为tcp_server.c,将客户端的网络程序保存为tcp_client.c,将客户端和服务器的字符串处理
13、保存为TCP _ procedure.c,建立以下Makefile:all : client server client : TCP _ process . o TCP _ client . o gcc-o client TCP _ process . o TCP _ client . o server 3360 TCP _ process . o TCP _ server . Er。o gcc-o服务器TCP _ process。o TCP _ server。o clean:rm-f客户端服务器*。o,2.4是截取信号的一个例子。当Linux操作系统中的某些条件改变时,系统会向相关进程发送信
14、号。信号处理模式系统将首先调用进程中注册的处理函数,然后调用系统的默认响应模式,包括终止进程。因此,在系统结束处理之前,为某些处理注册信号处理功能是一个必要条件。2.4.1信号处理,信号是发生某件事时的通知,有时称为软中断。信号将事件发送到相关进程,相关进程可以捕获和处理信号。信号的捕获由系统自动完成,信号处理功能的注册由功能信号()完成。函数信号()的原型是:# include typedef void(* sighandler _ t)(int);sighandler_t信号(int signum,SIG handler _ t handler);7.4.2信号信号管道,当正在写入套接字时
15、,当读取器关闭时,可以获得信号管道信号。SIGPIPE信号将终止当前进程,因为在调用系统的默认处理模式之前,信号系统将调用用户注册的函数,所以可以通过注册SIGPIPE信号的处理函数来获取信号并进行相应的处理。7.4.3 SIGINT信号,SIGINT信号通常是由CTRL-C终止进程引起的。与CTRL-C一致,默认情况下,kill命令发送SIGINT信号,该信号用于终止进程操作,并将该信号发送给当前活动的进程。无效符号(int符号)打印(捕获一个SIGINT信号);信号(SIGINT,SIG _ pipe);7.5小结,本章介绍了TCP网络编程的基本知识,并介绍了socket()、bind()、listen()、accept()、connect()、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 锡林郭勒职业学院《口腔疾病概要》2025-2026学年期末试卷
- 初级社会工作综合能力机考试题及答案
- BRM-BRG1-ATP-IN-9-生命科学试剂-MCE
- 广播电视机务员安全生产意识评优考核试卷含答案
- 大气环境监测员操作规范水平考核试卷含答案
- 环境噪声与振动监测员10S考核试卷含答案
- 高压熔断器装配工安全专项竞赛考核试卷含答案
- 2026年智慧城市成效评估题库
- 2026年供销合作社考试供销社应收账款管理题
- 呼吸治疗师岗前认知考核试卷含答案
- 老年人摄影与艺术创作指导
- 2024-2025学年度洛阳职业技术学院单招《职业适应性测试》综合提升测试卷含答案详解【新】
- 2025年文化旅游演艺产业集群人才培养可行性研究
- 蒙牛校园招聘在线测评题
- 2026年振动传递路径的分析方法
- 工程项目竣工资料归档与移交规范
- 工厂防错培训课件
- 高中数学资优生导师培养模式与教学资源整合研究教学研究课题报告
- 商业综合体弱电系统施工方案
- 2025年选拔乡镇副科级干部面试真题附答案
- 湖南公务员面试必-备知识要点集锦
评论
0/150
提交评论