网络通信编程 原始套接字程序的设计说明.pptVIP

网络通信编程 原始套接字程序的设计说明.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
课后作业 封装一个TCP报文头用于发起建立连接请求 * 谢谢观看! 2020 * s指定的是一个套接字,在此套接字上执行指定的选项。对你打算使用的具体协议来说,这个套接字必须是有效的。 Level制定选宣告被定在哪个级别,如SQL_SOCKET、IPPROTO_TCP、IPPROTO_IP等 optname参数是我们在此真正感兴趣的选项。,即套接字选项的名称,这些选项名均是在Winsock头文件内定义的常数值。最常见的与协议无关选项(比如和SOL_SOCKET级别关联在一起的选项)Winsock.h和Winsock2.h这两个头文件中定义的。对于每种特定的协议来说,它们都有自己的头文件,定义了与之对应的特定选项。 optval参数指定缓冲区,所请求的选项值将被返回到这里。 optlen参数制定optval所指缓冲区的大小,返回所需大小。 * 广播是一种特殊的数据发送方法,使本地子网上的所有机器都能收到相同的数据。当然,在监听进入广播数据的机器上,必须进行某些形式的处理。广播通信的缺点在于假如同时有许多进程发送广播数据,网络立刻就会拥挤不堪,造成网络性能大打折扣,甚至有可能陷入瘫痪。要想接收一条广播消息,首先必须启用广播选项,然后使用某个数据报接收函数,比如recvfrom或WSARecvfrom。另外还有一种方法,即把套接字与广播地址连接起来,这是通过调用connect或WSAConnect,再调用recv或WSARecv来实现的。对UDP播来说,必须指定一个端口号,以便向它发送数据报;类似的,接收端也必须请求在这个端口上接收广播数据。 * SO_CONNECT_TIME是一个微软专用选项,用于返回连接建立的秒数。该选项最常见的用法是和AcceptEx函数一道使用。AcceptEx要求为进入的客户机连接请求,传递一个有效的套接字句柄。该选项可在客户机的SOCKE T句柄上调用,以判断连接是否已经建立,以及建立了多久的时间。若套接字当前尚未连接,返回值便是0xFFFFFFFF。 SO_DONTROUTE(不路由)选项用于指示位于基层的网络堆栈,忽略路由表的存在,通过套接字绑定的那个接口直接将数据传送出去。例如,假定我们创建了一个UDP套接字,并将其与接口A绑定到一起,然后发送一个数据包,目的地是同接口B连接的另一个网络上的某台机器。此时,若采用默认设置,该数据包会经过一个路由过程,使其能通过接口B传入目标网络。但将这里的布尔值设为TRUE,再来调用setsockopt,便可禁止这样做,数据包会从绑定的接口上直接发送出去。以后可调用getsockopt,判断是否允许了路由。要注意的是,在默认情况下,路由是允许的。 * 默认情况下,套接字不同一个正在使用的本地地址绑定到一起。但在少数情况下,仍有必要以这种方式,来实现对一个地址的重复利用。通过第7章的学习,大家已经知道,每个连接都是通过它的本地及远程地址的组合,“独一无二”地标识出来的。针对我们想要连接的地址,只要能用极其细微的差异(比如T C P / I P中采用不同的端口号),来维持这种“独一无二”或者“唯一”的特点,绑定便是允许的。唯一例外的是监听套接字。两个独立的套接字不可与同一个本地接口(在TCP/IP的情况下,则是端口)绑定到一起,以等待进入的连接通知。 该选项的作用是禁止其他进程在一个本地地址上使用SO_REUSEADDR(我们的应用程序正在这个地址上运行)。例如,假定两个单独的进程都与同一个本地地址绑定到了一起(假定早先已设置了SO_REUSEADDR),那么两个套接字中到底由哪一个负责接收进入连接请求通知呢?这一点并未定义!如果应用程序的要求非常苛刻(用于关键性任务的程序),这一点显然是非常不幸的。SO_EXCLUSIVEADDRUSE选项的作用便是将一个本地地址牢牢锁定在与它绑定的那个套接字上。这样一来, 假如有其他进程试图针对相同的本地地址使用SO_REUSEADDR,进程调用便会失败。若想设置该选项,必须具有“管理员”的身份。而且要注意的是,它适用于Windows 2000。 * 其中,“代码”字段指出要提供的是什么类型的I P选项。例如,若将该值设为0x7,便意味着是“记录路由”选项。而“长度”字段对应着选项头的长度,“偏移”是指头内数据部分的起始偏移位置。头的“数据”部分必然是由特定的选项来决定的。在下述代码片断中,我们设置的是一个“记录路由”选项。请注意,我们首先声明了一个结构( struct ip_option_hdr),用它包含头三个选项值(代码、长度和偏移)。随后,我们将由具体选项决定的数据声明成一个数组,由9个无符号(无正负号)的长整数( long)构成,因为要记录的数据最多允许包含9个I P地址。在此要注意的是, IP选项头允许的最大

文档评论(0)

zxiangd + 关注
实名认证
文档贡献者

本人从事教育还有多年,在这和大家互相交流学习

1亿VIP精品文档

相关文档