- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
7.2.3 套接字编程 connect()函数语法: * 7.2.3 套接字编程 send()函数语法: * 7.2.3 套接字编程 recv()函数语法: * 7.2.3 套接字编程 sendto()函数语法: * 7.2.3 套接字编程 recvfrom()函数语法: * 非阻塞和异步I/O 在socket编程中可以使用函数fcntl(int fd, int cmd, int arg)的如下的编程特性。 获得文件状态标志:将cmd设置为F_GETFL,会返回由fd指向的文件的状态标志。 非阻塞I/O:将cmd设置为F_SETFL,将arg设置为O_NONBLOCK 异步I/O:将cmd设置为F_SETFL,将arg设置为O_ASYNC 示例: int flag flag = fcntl(sockfd, F_GETFL, 0); flag |=O_NONBLOCK; fcntl(sockfd, F_SETFL, flag); 7.3 网络高级编程 * 使用多路复用 使用fcntl()函数虽然可以实现非阻塞I/O或信号驱动I/O,但在实际使用时往往会对资源是否准备完毕进行循环测试,这样就大大增加了不必要的CPU资源的占用。在这里可以使用select()函数(或者使用poll()函数)来解决这个问题,同时,使用select()函数还可以设置等待的时间,可以说功能更加强大。 7.3 网络高级编程 * 7.1.3 TCP/IP核心协议 在TCP/IP协议族中,有很多种协议 。 * 7.1.3 TCP/IP核心协议 TCP TCP的上一层是应用层,TCP向应用层提供可靠的面向对象的数据流传输服务,TCP数据传输实现了从一个应用程序到另一个应用程序的数据传递。它能提供高可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信。),应用程序通过向TCP层提交数据接发送/收端的地址和端口号而实现应用层的数据通信。 通过IP的源/目的可以唯一的区分网络中两个设备的连接,通过socket的源/目的可以唯一的区分网络中两个应用程序的连接。 * 7.1.3 TCP/IP核心协议 三次握手 TCP是面向连接的,所谓面向连接,就是当计算机双方通信时必需先建立连接,然后进行数据通信,最后拆除连接三个过程。TCP在建立连接时又分三步走: 第一步(A-B):主机A向主机B发送一个包含SYN即同步(Synchronize)标志的TCP报文,SYN同步报文会指明客户端使用的端口以及TCP连接的初始序号; 第二步(B-A):主机B在收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示主机B的请求被接受,同时TCP序号被加一,ACK即确认(Acknowledgement)。 第三步(A-B):主机A也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成。 * 7.1.3 TCP/IP核心协议 三次握手 * 7.1.3 TCP/IP核心协议 TCP数据包头 TCP数据包头格式: * 7.1.3 TCP/IP核心协议 UDP UDP即用户数据报协议,是一种面向无连接的不可靠传输协议,不需要通过3次握手来建立一个连接,同时,一个UDP应用可同时作为应用的客户或服务器方。 由于UDP协议并不需要建立一个明确的连接,因此建立UDP应用要比建立TCP应用简单得多。UDP比TCP协议更为高效,也能更好地解决实时性的问题,如今,包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都使用UDP协议。 * 7.1.3 TCP/IP核心协议 UDP数据包头 * 7.1.3 TCP/IP核心协议 协议选择 协议的选择应该考虑到数据可靠性、应用的实时性和网络的可靠性。 对数据可靠性要求高的应用需选择TCP协议,而对数据的可靠性要求不那么高的应用可选择UDP传送。 TCP协议中的3次握手、重传确认等手段可以保证数据传输的可靠性,但使用TCP协议会有较大的时延,因此不适合对实时性要求较高的应用;而UDP协议则有很好的实时性。 网络状况不是很好的情况下需选用TCP协议(如在广域网等情况),网络状况很好的情况下选择UDP协议可以减少网络负荷。 * 7.2 网络基础编程 7.2.1 套接字(socket)概述 7.2.2 地址及顺序处理 7.2.3 套接字编程 * 7.2.1 套接字(socket)概述 套接字定义 在Linux中的网络编程是通过socket接口来进行的。套接字(socket)是一种特殊的I/O接口,它也是一种文件描述符。socket是一种常用的进程之间通信机制,通过它不仅能实现本地机器上的进程之间的通信,而且通过网络能够在不同机器上的进程之间进行通信。 每一个socket都用一
文档评论(0)