




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
作业1 1 使用API函数描述基于TCP的服务器和客户端程序的基本流程 Server WSAStartup socket bind listen accept recv send closesocket WSACleanup Client WSAStartup socket connect send recv closesocket WSACleanup 2020 2 13 1 2 调用connect 时触发什么过程 UDP编程时可否调用connect 为什么 A 触发三次握手过程 UDP编程时可以调用connect 因为在数据报套接字上调用connect 不会触发三次握手过程 操作系统仅仅将连接地址保存后直接返回 后续调用sendto 时可以不填入目标地址 2020 2 13 2 3 UDP通信时需要将收到的信息回送给对方该怎么处理 给出实现代码 charrecvbuf 256 intrecvbytes sendbytes sockaddr inaddr intlen sizeof addr recvbytes recvfrom s recvbuf 256 0 sockaddr 判断返回值 2020 2 13 3 4 调用recvfrom 之前是否必须显式绑定 为什么 A 不一定需要显式绑定 如果在调用recvfrom 之前调用了sendto 则可以不显式绑定 2020 2 13 4 5 4个数据收发函数可否都在TCP和UDP通信中使用 请比较使用时注意事项 A 都可以 1 sendto 和recvfrom 在UDP通信中以及send 和recv 在TCP通信中按照常规使用方式 2 send 在UDP通信中需先调用connect recv 在UDP通信中需先调用bind 3 sendto 和recvfrom 在TCP通信中 只需将后两个参数设为0即可 2020 2 13 5 作业2 从以下方面比较WSAAsyncSelect模型和WSAEventSelect模型的异同 1 能处理的网络事件类型2 得到网络事件通知的途径3 单线程能处理的套接字个数4 判断网络事件类型和网络错误方法5 触发FD READ和FD WRITE的条件 具体说明 2020 2 13 6 1 能处理的网络事件类型相同 常用网络事件包括FD ACCEPT FD READ FD WRITE FD CLOSE等2 得到网络事件通知的途径不同 WSAAsyncSelect模型由操作系统捕获网络事件并封装成WINDWOS消息 发送到窗口程序的消息队列中 应用程序从其消息队列中取出消息从而获得网络事件通知 而WSAEventSelect模型是通过等待关联的事件状态变化来获取事件通知 3 单线程能处理的套接字个数不同 WSAEventSelect模型为64 WSAAsyncSelect模型没有限制 2020 2 13 7 4 判断网络事件类型和网络错误方法不同 WSAEventSelect模型通过调用WSAEnumNetworkEvents 函数传入的指向WSANETWORKEVENTS结构体的指针lpNetworkEvents来返回网络网络事件和错误代码 if lpNetworkEvents lNetworkEvents FD 则表示发生了对应的网络事件 if lpNetworkEvents iErrorCode FD BIT 0 表示发生了网络错误 2020 2 13 8 WSAAsyncSelect模型通过MSG的附加信息来判断网络事件和网络错误 wParam指定发生网络事件的套接字句柄LParam指定发生的网络事件和错误代码 其中高字位指出网络错误 采用宏 if WSAGETSELECTERROR lParam 表示发生网络错误低字位指出发生的网络事件 采用宏 if WSAGETSELECTEVENT lParam FD 表示发生对应的网络事件 2020 2 13 9 5 触发FD READ和FD WRITE的条件 具体说明 收到FD READ事件通知的情况 1 调用WSAAsyncSelect 对socket注册FD READ事件时 接收缓冲区中已有数据 2 接收缓冲区由空变为有数据 3 调用recv 或recvfrom 从接收缓冲区读取数据时没有读完 2020 2 13 10 收到FD WRITE事件通知的情况 使用connect或WSAConnect 一个套接字首次建立了连接 针对客户端 使用accept或WSAAccept 套接字被接受以后 若send WSASend sendto或WSASendTo操作失败 返回了WSAEWOULDBLOCK错误 而且缓冲区的空间变得可用 2020 2 13 11 作业3 Q 在TCP服务器编程时 可以对每个accept 返回的套接字创建线程来处理该套接字上的数据收发 这样做有什么缺点 第三章的IO模型中哪些模型能改善这一缺点 为什么 A 缺点 线程膨胀 造成空间开销 时间开销增加 影响服务器性能 10分 所有IO模型均可以改善这一缺点 Select模型 通过设置套接字集合 可以在一个集合中管理64 default 个套接字 通过自定义FD SETSIZE管理更多的套接字 10分 WSAAsyncSelect模型 采用消息机制 调用WSAAsyncSelect 将套接字和窗口句柄关联起来 理论上可以管理的套接字数目没有限制 只是服务器性能会下降 10分 2020 2 13 12 WSAEventSelect模型 将每个套接字和一个事件对象关联 该模型最多等待64个套接字 也就是最多处理64套接字 连接套接字增加时可以使用线程池技术 10分 重叠IO模型 使用重叠结构投递IO请求后 重叠结构中事件对象受信后查询重叠操作结果 处理数据 采用单线程可以管理多个套接字 将套接字和套接字使用的IO缓冲区以对象的形式组织成链表 通过套接字来创建其对应的缓冲区对象 包含一个重叠结构 10分 2020 2 13 13 Q 完成端口中per handle数据和per IO数据各有什么作用 A 客户上下文对象 单句柄数据 主要作用在于关联完成端口时传递套接字信息 在查询完成端口时该套接字信息会通过lpCompletionKey参数返回 15分 缓冲区对象 单IO数据 主要作用在于投递重叠IO时传递IO信息 包括缓冲区 IO类型 OVERLAPPED结构等等 在查询完成端口时通过lpOverlapped参数返回投递IO时使用的重叠结构地址 通过该该结构获得投递IO时使用单IO数据 15分 通过二者可以确定已完成IO的套接字以及该套接字上的IO信息 进而处理数据 用程序流程图描述使用完成端口的编程步骤 20分 2020 2 13 15 作业4 Q 实现广播和多播时能否使用流式套接字 为什么 A 单播时只能使用流式套接字 实现广播和多播时只能使用数据报套接字 流式套接字一旦建立后 其通信的端点就固定不变 通信只能在两个端点之间进行 而广播和多播通信是一对多的通信 显然流式套接字不能满足要求 而数据报套接字为无连接的 指定发送的目的地址即可 10分 Q 在winsock1和winsock2中如何加入和退出多播组 A winsock1使用setsockopt 函数加入和退出多播组加入 5分 structip mreqmcast 对mcast赋值setsockopt sockM IPPROTO IP IP ADD MEMBERSHIP char mcast sizeof mcast 退出 5分 setsockopt sockM IPPROTO IP IP DROP MEMBERSHIP char mcast sizeof mcast 2020 2 13 17 winsock2使用WSAJoinLeaf 函数加入多播组 退出多播组直接关闭由WSAJoinLeaf返回的套接字socketsock sockM structsockaddr inmcast mcast赋值加入 5分 sock WSASocket AF INET SOCK DGRAM 0 NULL 0 WSA FLAG MULTIPOINT C LEAF WSA FLAG MULTIPOINT D LEAF WSA FLAG OVERLAPPED sockM WSAJoinLeaf sock SOCKADDR 2020 2 13 18 Q 某主机IP为202 3 4 5 使用排除方式加入多播组234 5 6 7同时拒绝接受来自222 1 2 3的数据 请给出实现代码 仅加入多播组和排除源地址的代码即可 A structip mreqmcast structip mreq sourcemresrc 加入多播组 10分 mcast imr multiaddr S un S addr inet addr 234 5 6 7 mcast imr interface S un S addr inet addr 202 3 4 5 setsockopt sockM IPPROTO IP IP ADD MEMBERSHIP char mcast sizeof mcast 2020 2 13 19 排除源地址 10分 mresrc imr interface S un S addr inet addr 202 3 4 5 mresrc imr multiaddr S un S addr inet addr 234 5 6 7 mresrc imr sourceaddr S un S addr inet addr 222 1 2 3 setsockopt sockM IPPROTO IP IP BLOCK SOURCE char mresrc sizeof mresrc 2020 2 13 20 4 发送自己封装的UDP数据报应遵循什么步骤 20分 1 首先以IPPOTO UDP为协议类型创建一个原始套接字 打开原始套接字上的IP HDRINCL选项 2 然后构建UDP封包 先设置IP头 再设置UDP头 最后设置数据 3 初始化完整的UDP封包之后 调用sendto函数即可将它发送 2020 2 13 21 Q 阐述路由跟踪原理 给出实现思路 A 基本思想 多次发送数据包 TTL递增 TTL为0时返回一条ICMP报文 10分 两种方法 发UDP数据报和ICMP数据包 1 使用UDP时创建两个套接字 5分 sRaw用于接收ICMP数据包sSend用于发送TTL不断增加的UDP数据报 2 使用ICMP数据包时使用一个原始套接字 5分 Q 简述网络嗅探器的编写步骤 10分 A 1 创建原始套接字并绑定到明确的本地地址 不能使用INADDR ANY 2 调用ioctlsocket 设置混杂模式3 调用recv 函数获取数据包 4 解析收到的数据包 补充习题 1 套接字工作在阻塞模式下 列举5个会阻塞的WinsockAPI函数 2 列举ioctlsocket 函数两种用途 3 TCP编程时客户端程序是否需要调用bind 函数 为什么 4 重叠操作使用的重叠结构上的事件对象状态由无信号状态变为有信号状态 是否意味着这一次重叠操作成功完成 为什么 5 解决套接字工作在非阻塞模式下的WSAEWOULDBLOCK错误需要解决什么根本问题 如何有效解决 2020 2 13 24 1 Q 套接字工作在阻塞模式下 列举5个会阻塞的WinsockAPI函数 A accept send recv sendto recvform 注意在非阻塞模式下这些函数不会阻塞 2 Q 列举ioctlsocket 函数两种用途 A 1 设置套接字的工作模式2 获取套接字上可读取的数据量3 Q TCP编程时客户端程序是否需要调用bind 函数 为什么 A 不需
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年四川省广元市英语八下期末检测模拟试题含答案
- 王者荣耀语文试题及答案
- 外科选择试题及答案
- 图书馆笔试题目及答案
- 统筹方法的试题及答案
- 2025年商业担保贷款协议参考格式
- 2025年基金持有者权益与责任协议
- 2025年数据软件协议手册
- 2025年房产租赁权策划变更协议书
- 2025年仓储管理策划与物流合作协议
- 全过程工程咨询投标方案(技术方案)
- 初中物理神奇的电磁波+物理教科版九年级下册
- GB/T 718-2024铸造用生铁
- 2024-2029年中国无溶剂复合机行业市场现状分析及竞争格局与投资发展研究报告
- 汽车维修项目实施方案
- 竞技体育人才队伍建设方案
- 《多联机空调系统工程技术规程》JGJ174-2024
- MOOC 微积分(二)-浙江大学 中国大学慕课答案
- 跨学科学习:一种基于学科的设计、实施与评价
- MOOC 动物营养学-西北农林科技大学 中国大学慕课答案
- 2020年江西省上饶市万年县中小学、幼儿园教师进城考试真题库及答案
评论
0/150
提交评论