嵌入式Linux编程 课件 第七章 Linux高性能网络编程_第1页
嵌入式Linux编程 课件 第七章 Linux高性能网络编程_第2页
嵌入式Linux编程 课件 第七章 Linux高性能网络编程_第3页
嵌入式Linux编程 课件 第七章 Linux高性能网络编程_第4页
嵌入式Linux编程 课件 第七章 Linux高性能网络编程_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

第7讲高性能网络编程主讲:学习目标及要求学会TCP协议服务器端和客户端工作流程。掌握基于套接字的网络编程方法。掌握多进程、多线程、线程池和高效I/O多路复用网络服务器的设计。掌握高性能网络服务器编程。能力目标和要求

嵌入式终端通常需要与外部通信,接收控制指令,传输运行状态和采集的数据。嵌入式Linux系统能够驱动各种网络设备,并通过网络协议实现通信。每一位嵌入式软件工程师,都需要熟练掌握网络通信编程方法。项目导入目录:7.1网络编程基本知识7.2基于套接字的网络编程7.3高性能网络服务器编程7.4

基于多路复用的网络通信7.5项目实录7.1网络编程基本知识41.TCP/IP分层模型7.1网络编程基本知识5(2)

网络层(InternetLayer)网络层负责在主机之间的通信中选择数据报的传输路径,即路由。当网络层接收到传输层的请求后,传输某个具有目的地址信息的分组。该层把分组封装在IP数据报中,填入数据报的首部,使用路由算法来确定是直接交付数据报,还是把它传递给路由器,然后把数据报交给适当的网络接口进行传输。(1)

网络接口层(NetworkInterfaceLayer)网络接口层是TCP/IP协议软件的最底层,负责将二进制流转换为数据帧,并进行数据帧的发送和接收。数据帧是网络传输的基本单元。7.1网络编程基本知识6(3)

传输层(TransportLayer)传输层负责提供应用程序之间的通信服务。这种通信又称为端到端通信。传输层要系统地管理信息的流动,还要提供可靠的传输服务,以确保数据到达无差错、无乱序。为了达到这个目的,传输层协议软件要进行协商,让接收方回送确认信息及让发送方重发丢失的分组。传输层协议软件把要传输的数据流划分为分组,把每个分组连同目的地址交给网络层去发送。7.1网络编程基本知识7(4)应用层(ApplicationLayer)应用层是分层模型的最高层,在这个最高层中,用户调用应用程序通过TCP/IP互联网来访问可行的服务。与各个传输层协议交互的应用程序负责接收和发送数据。每个应用程序选择适当的传输服务类型,把数据按照传输层的格式要求封装好向下层传输。7.1网络编程基本知识82.TCP/IP模型边界特性7.2

基于套接字的网络编程93.讨论(1)TCP和UDP的最大区别是什么?分别应用于什么场合?(2)socket是什么?套接字是什么?目录:7.1网络编程基本知识7.2基于套接字的网络编程7.3高性能网络服务器编程7.4

基于多路复用的网络通信7.5项目实录7.2

基于套接字的网络编程111.网络编程——套接字套接字(Socket)是一种特殊的I/O接口,可以使网络中不同主机上的应用实现双向通信。套接字提供了一套访问底层TCP/IP通信服务的标准API接口,在嵌入式Linux系统中应用十分广泛。利用二元组<IP,Port>来描述一个套接字。套接字的类型主要有以下三种:7.2

基于套接字的网络编程12(1)流式套接字(SOCK_STREAM)流式套接字提供可靠的、面向连接的通信流;它使用TCP协议,从而保证了数据传输的可靠性和顺序性。(2)数据报套接字(SOCK_DGRAM)数据报套接字定义了一种无可靠、面向无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证是可靠、无差错的。它使用数据报协议UDP。(3)原始套接字(SOCK_RAW)原始套接字允许对底层协议如IP或ICMP进行直接访问,它功能强大但使用较为不便,主要用于一些协议的开发。7.2

基于套接字的网络编程132.工作流程7.2

基于套接字的网络编程14(1)

socket()函数语法:7.2

基于套接字的网络编程15(2)

bind()函数语法:7.2

基于套接字的网络编程16(3)listen()函数语法:7.2

基于套接字的网络编程17(4)

accept()函数语法:7.2

基于套接字的网络编程18(5)

connect()函数语法:7.2

基于套接字的网络编程19(6)send()函数语法:7.2

基于套接字的网络编程20(7)

recv()函数语法:7.2

基于套接字的网络编程21(8)

recvfrom()函数语法:7.2

基于套接字的网络编程22(9)

sendto()函数语法:233.简单的服务器与客户端(代码讲解):教师演示学生训练7.2

基于套接字的网络编程7.2

基于套接字的网络编程244.讨论本节的服务器实例只能顺序处理客户的服务请求,而不能并发处理多客户的同时任务请求,无法满足多任务、实时的应用场景。(1)你所知道的提高网络服务器性能的方法有哪些?(2)服务器具有哪些特性是高性能?目录:7.1网络编程基本知识7.2基于套接字的网络编程7.3高性能网络服务器编程7.4

基于多路复用的网络通信7.5项目实录7.3高性能网络服务器编程26在Linux软件开发领域,高性能的网络服务器是开发的重点。实现高性能的网络服务器需要从底层的网络协议到操作系统对服务器性能进行优化。我们可以应用哪些操作系统运行机制进行高性能网络服务器的开发?1.高性能网络服务器编程7.3高性能网络服务器编程27如何应用以下操作系统运行机制进行高性能网络服务器的开发?(1)多进程、(2)多线程、(3)线程池2.讨论7.3高性能网络服务器编程283.基于多线程的网络通信示例在基于多线程的高性能服务器实现中,通过accept()函数接收来自客户端的连接请求后,需要创建新的线程。在新的线程中,接收来自客户端的数据,并进行数据处理,最后将处理结果返回客户端。7.3高性能网络服务器编程293.运行结果7.3高性能网络服务器编程30运行中的模拟客户端314.高性能网络服务器编程(代码讲解):教师演示学生训练7.3高性能网络服务器编程目录:7.1网络编程基本知识7.2基于套接字的网络编程7.3高性能网络服务器编程7.4

基于多路复用的网络通信7.5项目实录7.4基于多路复用的网络通信33高性能的服务器往往通过I/O多路复用服务大量客户端的连接请求,并为客户提供数据服务。我们可以应用哪些I/O多路复用技术实现高性能网络服务器的开发?它们之间有什么不同?

1.讨论7.4基于多路复用的网络通信341)基于select机制的网络服务器

虽然select能够监控输入文件描述符集合、输出文件描述符集合以及错误处理文件描述符集合,但本示例程序将所有的网络通信的套接字放入输入文件描述符集合进行监控。7.4基于多路复用的网络通信352)基于poll机制的网络服务器

在基于poll机制的网络服务器中,将服务器套接字和accept函数返回的套接字封装成相对应的输入或输出事件。然后,通过poll函数对事件进行监控,一旦事件发生,Linux内核将设置结构体structpollfd的成员revents。最后,循环扫描结构体structpollfd数组并对发生对应事件的套接字进行处理7.4基于多路复用的网络通信363)基于epoll机制的网络服务器

epoll是Linux内核为处理大批量句柄而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著减少程序在大量并发连续中只有少量活跃的情况下的系统CPU利用率。7.4基于多路复用的网络通信37通过以下I/O多路复用技术实现高性能网络通信:(1)基于select机制的网络服务器(2)基于poll机制的网络服务器(3)基于epoll机制的网络服务器

2.学生练习:38该代码文件名network_select.c,通过gcc将其编译为可执行程序network_select。在测试过程中,两个客户端连接的服务器均为192.168.3.166,其端口号为4321。两个客户端均能够连接到select的服务器,并能够实现数据的收发工作,运行稳定。7.4.1基于select机制的网络服务器3.运行结果39运行中的模拟客户端7.4.1基于select机制的网络服务器401.基于多路复用的网络通信服务器(代码讲解):教师演示学生训练7.4基于多路复用的网络通信思考题411.在网络通信中,流式和数据报两种套接字类型有什么不同?2.在基于套接字的网络通信实例中,关闭服务器程序,并再次运行服务器时,可能出现绑定IP和端口错误,地址已经被占用的提示信息,试分析原因并给与解决。3.简述使用TCP协议的网络通信流程。4.在TCP服务器程序中,accept函数的作用?

温馨提示

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

评论

0/150

提交评论