网站大量收购闲置独家精品文档,联系QQ:2885784924

04嵌入式Linux应用程序开发.ppt

  1. 1、本文档共67页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
课程安排 Linux系统文件与I/O Linux系统多进程并发 Linux系统多线程并发 Linux系统网络通信 TCP/IP协议 TCP/IP网络协议栈分为应用层(Application)、传输层(Transport)、网络层(Network)和链路层(Link)四层 Linux 对TCP/IP的实现 Linux 对TCP/IP的实现 Linux以分层的软件结构实现了TCP/IP协议 用网络驱动程序实现数据链路层功能 内核内置的TCP/IP协议栈处理IP,TCP/UDP以IP转发功能 用户程序通过套接字(SOCKET)与协议栈打交道 SOCKET是一个通用的接口,一般应用开发者只需掌握基于因特网IPV4的Socket TCP和UDP网络通讯开发即可 TCP与UDP TCP与UDP属于端对端的传输层协议 TCP是面向连接的: 需要在数据传送之前在设备之间建立“逻辑连接”,数据传输结束,“逻辑连接”即被断开。 “逻辑连接”保证了数据传输的可靠性,所以面向连接协议是可靠的 UDP是面向无连接的 不需要建立“逻辑连接”,在源端在需要的时候就可以立即开始发送数据。 无连接协议是不可靠的,但通讯效率更高 UDP协议格式 TCP协议格式 UDP编程流程 UDP客户端示例 UDP服务器示例 UDP编程流程 UDP通信过程 TCP编程流程 TCP客户端示例 TCP服务器示例 TCP编程流程 TCP 通信过程 1个小时 * * * IP地址标识网络上的唯一主机,而端口号标识该主机上的唯一进程。 和UDP协议一样也有源端口号和目的端口号,通讯的双方由IP地址和端口号标识。 32位序号、32位确认序号、窗口大小用于保证传输可靠性。 4位首部长度和IP协议头类似,表示TCP协议头的长度,以4字节为单位。 因此TCP协议头最长可以是4x15=60字节 如果没有选项字段,TCP协议头最短20字节 URG、ACK、PSH、RST、SYN、FIN是六个控制位用于TCP连接建立、断开等链路控制。 16位检验和将TCP协议头和数据都计算在内。 紧急指针和各种选项的解释从略,请参考TCP/IP卷一 客户端无需显示绑定端口号,系统协议栈会自动选择一个空闲端口号 由于UDP不需要维护连接,程序逻辑简单了很多,但是UDP协议是不可靠的,实际上有很多保证通讯可靠性的机制需要在应用层实现 在两个终端里各开一个client与server交互,看看server是否具有并发服务的能力 用Ctrl+C关闭server,然后再运行server,看此时client还能否和server联系上 和TCP程序的运行结果相比较,体会无连接的含义 客户端无需显示绑定端口号,系统协议栈会自动选择一个空闲端口号 客户端无需显示绑定端口号,系统协议栈会自动选择一个空闲端口号 客户端无需显示绑定端口号,系统协议栈会自动选择一个空闲端口号 可以用netstat -apn|grep port查看客户端和服务器端口状态 服务器调用socket()、bind()、listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态,客户端调用socket()初始化后,调用connect()发出SYN段并阻塞等待服务器应答,服务器应答一个SYN-ACK段,客户端收到后从connect()返回,同时应答一个ACK段,服务器收到后从accept()返回 建立连接后,TCP协议提供全双工的通信服务,但是一般的客户端/服务器程序的流程是由客户端主动发起请求,服务器被动处理请求,一问一答的方式。因此,服务器从accept()返回后立刻调用read(),读socket就像读管道一样,如果没有数据到达就阻塞等待,这时客户端调用write()发送请求给服务器,服务器收到后从read()返回,对客户端的请求进行处理,在此期间客户端调用read()阻塞等待服务器的应答,服务器调用write()将处理结果发回给客户端,再次调用read()阻塞等待下一条请求,客户端收到后从read()返回,发送下一条请求,如此循环下去 如果客户端没有更多的请求了,就调用close()关闭连接,就像写端关闭的管道一样,服务器的read()返回0,这样服务器就知道客户端关闭了连接,也调用close()关闭连接。注意,任何一方调用close()后,连接的两个传输方向都关闭,不能再发送数据了。如果一方调用shutdown()则连接处于半关闭状态,仍可接收对方发来的数据。 注意应用程序和TCP协议层是如何交互的: 应用程序调用某个socket函数时TCP协议层完成什么动作, 比如调用connect()会发出SYN段 应用程序如何知道TCP协议层的状态变化,从某个阻塞的socket函数返回就表明TCP协议收到了某些

文档评论(0)

junjun37473 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档