- 1、本文档共26页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
网络编程技术 概述 无线局域网是网络技术研究与应用的热点,其中802.11协议是其中最基本和最重要的协议之一。通过模拟无线网络帧发送和接收的过程,读者能够深入理解无线网络数据发送流程与CSMA/CA的基本工作原理。 提纲 编程训练目的 编程训练要求 相关知识介绍 程序设计分析 扩展与提高 编程训练目的 掌握模拟无线网络帧发送和接收的过程 使读者了解无线网络数据发送流程,即CSMA/CA工作流程 掌握使用模拟程序分析问题和解决问题的能力 多线程编程技术 提纲 编程训练目的 编程训练要求 相关知识介绍 程序设计分析 扩展与提高 编程训练要求 程序运行界面示例 提纲 编程训练目的 编程训练要求 相关知识介绍 程序设计分析 扩展与提高 802.11协议概述 提纲 编程训练目的 编程训练要求 相关知识介绍 程序设计分析 扩展与提高 工作流程 总体执行流程 定义变量dwBus,代表共享信道 将该变量置零 开启两个线程分别模拟接收数据的主机B和发送数据的主机A 在一个循环中模拟其他主机访问共享信道的情况 1、定义常量参数,代表无线数据 2、主线程代码 2、主线程代码 数据接收线程 程序始终检测共享介质上是否有信号 如果检测到信号且接收数据准确无误(即传输过程中未发生冲突),则接收数据完毕后发送ACK数据帧 准备接收下一个数据帧 整个过程持续到接收完10个数据帧后结束 3、数据接收线程 数据发送线程 监听信道,确定信道空闲后,随机等待一段时间再次确认信道状态,以便将冲突的概率降到最低 再次确认信道空闲后,发送数据帧 等待ACK帧,在指定时间内收不到ACK帧则随机等待一段时间后进行重传 如果重传超过次数上限,则放弃该数据帧的发送 退避时间计算方法 802.11采用二进制指数退避算法,其第i次退避在22+i个时间片中随机选择一段进行退避,即实际退避时间为小于等于22+i 的一个随机数乘以TimeSlot的积加上DIFS。 (DIFS:分布协调功能帧间间隔,一般在调频扩频通信FHSS下为128us,程序设置50us) 4、数据发送线程 4、数据发送线程 5、退避时间计算方法 提纲 编程训练目的 编程训练要求 相关知识介绍 程序设计分析 扩展与提高 扩展与提高 IEEE 802.11b无线网络包含组件 IEEE 802.11b运作 *网络编程技术 计算机硬件基础教学中心 Copyright ? by NUPT All rights reserved. Technology of Network Programming 第12章 CSMA/CA算法模拟程序 编写程序,模拟CSMA/CA的通信过程,要求: 使用两个线程分别模拟局域网中收发数据的两台主机A、B; 使用第三个线程模拟其他主机随机发送数据帧行为,制造冲突; 使用一个变量来模拟共享信道; 由A主机向B主机发送十个数据帧,并接收B主机发送的ACK帧,如果发送失败,则等待一段时间后进行重传,如重传超过指定次数后仍然失败,自动放弃该次数据传输; 输出相关提示信息; 发展历史 特点 工作原理 与CSMA/CD的区别 #define SEND 0xf0000000 #define ACK 0x0f000000 #define CONF 0x00f00000 //代表冲突 #define TimeSlot 30 #define DIFS 50 //这里是为了模拟方便 实际时间SIFS=28μs,PIFS=78μs,DIFS=128μs int _tmain(int argc, _TCHAR* argv[]) { dwBus=0; //代表共享信道 DWORD ThreadID=0; CreateThread(NULL,0,HostB,NULL,0,ThreadID); //接收数据主机 CreateThread(NULL,0,HostA,NULL,0,ThreadID); //发送数据主机 srand((unsigned)time(NULL)); for(int i=0;i10000;i++) //模拟其它主机访问共享信道的情况 { Sleep((rand()%20)*300); dwBus=dwBus|CONF; //模拟信道冲突 Sleep(2000);//模拟其它主机发送行为,数据帧在信道上出现两秒,然后消失 dwBus=0;//模拟信道空闲 } return 0; } CreateThread(NULL,0,HostB,NULL,0,ThreadID); //接收数据主机 DWORD WINAPI HostB(LPVOID) { do { while((dwBus0x
文档评论(0)