网络通信程序设计论文

2022-04-18

【摘要】介绍了一种全新的基于ARM嵌入式车载状态监测与故障诊断系统,探讨了车载状态监测与故障诊断系统的基本原理。分析了该系统的硬件组成部分。还研究了嵌入式软件系统的设计方法,能够满足状态监测与故障诊断的需要。该系统必将作为一种全新的汽车电气配置于汽车中。今天小编为大家推荐《网络通信程序设计论文(精选3篇)》,仅供参考,希望能够帮助到大家。

网络通信程序设计论文 篇1:

Internet下的计算机网络实践教学改革研究

【摘要】世界互联网大会召开为当今Internet发展指出了新的方向,对高等院校计算机网络教学,尤其是实践教学方面提出更高的要求,新发展环境,新需求迫切要求我们对计算机网络实践教学进行全面改革,建立以实践教学促进理论教学的新方法,加强实践环节,提高学生实践能力。结合我校计算机网络教学体系的建设,分析了当前计算机网络课程体系的现状,提出了新环境下,一系列计算机网络教学体系、尤其实践教学应以基础技术验证性为根本、以基础技能拓展和知识体系综合为最终目标,设计多层次的实践教学体系,实现由基础教认知,到知识拓展综合,进而创新的教学体系。

【关键词】世界互联网 计算机网络 实践教学 改革

一、引言

习近平同志在首届互联网大会上指出,当今以信息技术为核心的新一轮科技革命正在孕育兴起,互联网日益成为创新驱动发展的先导力量,深刻改变着人们的生产生活,有力推动着社会发展。同时,互联网发展对国家主权、安全、发展利益提出了新的挑战,迫切需要国际社会认真对待[1]。

新时代Internet下计算机网络的教学应该有更明确、更系统的教学目标要求,当前计算机网络实践教学环节非常薄弱,严重制约了教学质量的进一步提高。必须在实践中培养学生的动手能力,进而促进理论的学习,走一条实践-认识-再实践-再创新的道路,推进实验内容和实验模式改革,规范实验教学,形成与理论教学改革相协调的实验教学体系迫在眉睫。

二、计算机网络课程实践教学的现状

计算机网络课程特征是理论性和实践性并重的课程。课程传授既要注重网络体系结构和协议的分析,又要加强对学生的实践能力培养,培养其网络组建、网络分析、网络安全维护等能力的培养。在目前教学中,呈现出是“重理论,轻实践”的现象。网络实验教学仍是在封闭固化好的网络环境中,以观测等方式来讲述基本网络的基础应用。为了适应新的Internet环境下社会对计算机网络人才的需求,计算机网络实验课程内容和教学方式的改革势在必行。

三、加强实验室基础建设构建创新环境

计算机网络实践教学必须拥有一个良好开放的实验环境,开放的实践教学环境是事关改革成效的重要保障,为此我院于在05年开始在“吉大中软”的协助下建设了计算机网络协议仿真实验室,08年我们与“锐捷网络”合作建设了计算机网络工程实验室,同时在网络工程实验室的基础上创建计算機网络安全实验室。13年又建设了网络云处理实验室,形成了以基础物理网络组建,到网络应用程序开发,网络服务的构建,再到网络安全攻防演练全系统的开放环境、能够适应计算机专业和信息安全专业的人才培养创新实验环境,目前该实验室系统为全校与计算机网络课程相关的专业学生开设网络工程、网络应用和网络安全管理等方面的基础性、综合性、设计性、系统性的实验,培养了学生的创新意识和创新能力,提高了本校学生在就业市场上的竞争能力。

四、整合网络教学体系培养学生创新能力

计算机网络教学体系的改革从实践教学体制与体系方面着手,开始一减一增改革,减少观测类实验实习,增加创新性、设计性和综合性实验实习。按照专业的特点,采用分层次,分方向的,加强实践、着眼创新的培养方案。按照知识认知,知识拓展,知识创新的规律,分别安排基础技术验证性、基础技能拓展和知识体系综合设计四个层次的教学体系。其中50%的项目作为基础实验的内容,30%的项目有意识的引导开放实验,20%供学生自由选择选择创新,尊重学生主动性和个性化发展。下面我们简单介绍四个层次教学体系的安排:

1.基础网络工程应用实践教学

以建立校园网拓扑为案例,做相应基础性实验。如图1网络工程案例所示,分别构建2个园区网,1个公共网,园区网内用三层交换机搭建出内部服务器区、办公区,用路由器完成Internet的接入。

在此拓扑上完成内部网络管理,包括网络安全,网络访问权限,网络效率管理,Internet接入路由器上实现VPN(虚拟专用网络)、无线、语音传输、防火墙等的网络工程实验项目。

内网络服务器区以搭建网络应用服务平台目标,形成以Web服务、FTP服务、E_mail服务为核心的网络应用平台。进行网络数据流量测试,压力测试。

2.网络安全分析

Wireshark网络包分析工具,在接口实时捕捉网络包,并详细显示包的详细协议信息。Wireshark可以捕捉多种网络接口类型的包,包括无线局域网接口。并可以打开多种网络分析软件捕捉的包,支持许多协议的解码。实验中可以练习用它来检测网络安全隐患、解决网络问题,分析网络业务流形成过程等。如图2:捕获了一次完成浏览器访问WEB服务器的数据传输流程,从而可以更清晰的了解HTTP协议,DNS、TCP协议工作的过程,

3.网络通信程序设计实践教学

用C语言开发基于Windows与Linux平台上的Socket和P2P通信机制进行得的网络通信程序设计的实验项目,完成数据的远程传输,网络数据的捕获、分析,网络的攻防实验项目。如图3所示,完成基本网络协议编程,完成网络数据在底层传输处理,加强学生对网络协议处理细节理解,对协议安全进行分析,并在此基础上进行网络安全系统的程序设计。

4.网络教学平台的建设

利用基于HTTP的Web网络教学互动平台,实现网络在线测试,在线答疑。

在近几年教学活动中通过以上四个体系中的开放式的、分层次的实验内容,不断进行了完善、扩展,使各层面同学既达到基础知识灵活掌握,又实现专业基础课程上进行自主拓展创新实验,最终达到理论与实验教学的密切结合。

五、加强考核管理

计算机网络实践教学和实验课程的管理采取课程负责人统一协调下的教师责任制。严格实验考核过程,加强考核质量。在实验成绩的评定上,既看结果又看过程,并着重考查实验方案的合理性和创造性,考查实验过程中问题的观察、分析和处理能力。

六、结束语

计算机网络实践教学经过几年来的摸索取得了一定的成果:1.在计算机网络教学实践教学环境的支撑下,为适应不同级别学生的需求,制定了不同教学方案。对计算机科学与技术、计算机网络专业学生采用原版英文教材进行“双语”模式教学,以紧跟计算机网络技术的发展。2.对基本工科的计算机网络系列课程的教学计划、教学大纲和教材进行了调整,充分考虑了实验课与理论课的有机结合。3.建立一个综合的、科学的、开放的实践教学体系,各专业灵活的组织教学方案。

参考文献:

[1]http://www.wicnews.cn/

[2]创新网络实验教学,培养专业网络技术人才-锐捷高校网络实验室整体解决方案[J].中国现代教育装备,2005,(8):114~116.

[3]谢希仁著.计算机网络(第5版)[M].北京:电子工业出版社,2008.

[4]苗凤君等编著.局域网技术与组网工程[M].北京:清华大学出版社,2010.

[5]宋宏光等编著.高级语言程序设计[M].哈尔滨:东北林业大学出版社,2014.

作者:宋宏光 徐达丽 候畅

网络通信程序设计论文 篇2:

嵌入式车载状态监测与故障诊断系统

【摘 要】介绍了一种全新的基于ARM嵌入式车载状态监测与故障诊断系统,探讨了车载状态监测与故障诊断系统的基本原理。分析了该系统的硬件组成部分。还研究了嵌入式软件系统的设计方法,能够满足状态监测与故障诊断的需要。该系统必将作为一种全新的汽车电气配置于汽车中。

【关键词】嵌入式;汽车故障诊断;专家系统;ARM

随着技术的发展,人们在工业控制、检测设备及故障诊断等系统的设计中,也越来越智能化,精密化,汽车故障诊断系统亦是如此。现有的汽车故障诊断系统全部是大型固定设备,一般是汽车出了故障,停车后才能诊断。不仅使用不方便也不能有效的预防汽车故障。本系统就是基于嵌入式的车载故障诊断系统,可以实时检测汽车的各项指标是否正常,并通过液晶显示器显示出来,它安装在汽车驾驶室内,驾驶员随时可以看到汽车的各项指标,如果那一项指标超出正常范围,该系统通过蜂鸣器提示驾驶员,它能够及早发现问题,避免一些不必要损失,方便维修人员维修。

一、车载状态监测与故障诊断系统原理

首先要建立专家故障诊断系统,它由知识库与推理机组成。知识库收集提炼了具有相当经验的汽车维修人员和诊断专家对于故障原因的认识。根据他们多年的故障诊断的经验和方法归纳成数据库规则。数据库收集了包括内燃机爆响、气门响等80余个规则。推理机是一个软件系统,运用知识库提供的关于数据域规则的知识,进行自动推理求解问题。

1. 知识库的建立。

系统知识库采用故障原因-征兆二元布尔关系矩阵来描述布尔函数:E=(S1,S2,…,Sn;R1,R2,…,Rm)。一个普通的故障原因与征兆图如图2:

其中:Rj为第j种类型故障类型;Si为第i种征兆;m为可能故障原因类型数;n为检测到征兆类型数;为当故障Rj发生时征的Si可能状态,且Iij为故障发生时,征兆Si可能的状态且

2.推理机制。

推理机制我们采用的是基于上述模糊关系矩阵的推理。它把所有的故障表示成一张模糊的关系矩阵表,每一个矩阵值表示相应的故障症状可能确定的故障类型的贡献程度。亦称作模糊模型用A=(a1,a2,…,an)表示。当对系统进行故障信号采集,然后对每一个征兆类型赋值1或0,来确定函数G(·)(它表示某一故障原因组合具有的原因)。通过对数G(·)描绘的观察征兆结果叫做观察矢量,用S′表示。且令S′=()。如果能观察到征兆Si,则的值为1,反之为0,这时会得到一个观察矢量S′,即给函数G(·)赋了值,此时可以得到一个矢量结果用A表示,A=(a1,a2,…,an)此时模型建立完成。

由专家确定的模糊关系矩阵表示为R,R=[ri,j]mxn其中m为结论个数,按照以下的模糊推理算得到结论:D=R·CT。其中·表示矩阵运算,D表示结(d1,d2,…,dn)论集中由每个结论结果所构成的m€?的向量,T表示转置。D=(d1,d2,…,dn)表示第i个结论经过推理之后的值。取其中第j个结论作为最终的推理结论其中,j│dj=MAX(d1,d2,…,dn)即取其中的最大值作为最终的推理结论值。我们称之为预测值,当该输出变量的实际观测值与预测值之间的差异超过某阀门值,就可以检测出故障。

二、诊断系统硬件设备

ARM微处理器是32位嵌入式RISC微处理器,低功耗、高性能、低成本;提供扩充的16/32位双指令集,处理器本身是32位设计,但也配备16位指令集,增加了DSP指令集,提高了芯片的性能与灵活性。本文设计采用ARM7TDMI内核芯片S3CBB40X,该控制器具有强大的信号处理功能,实现比值、串级、前馈、程序控制等多种复杂的控制功能;具有温压补偿功能,控制精确;能够真正远程控制功能,使用配套的数据管理软件,可以方便的进行监控与管理。在汽车各个容易出现故障的地方加装传感器(比如爆燃传感器),这些传感器采集的信号经过放大电路放大进入A/D系统,A/D转换器集成在ARM的内部,负责将前端采集的模拟信号转换成ARM可以识别的数字信号,进入A/D采集数据池。数据进入到ARM后,即可通过ARM对数据进行分析和处理,包括对振动信号进行时域分析、频谱分析、1/3倍频程分析、示功图、外特性图分析等。系统还需要数据显示模块和数据存储模块。数据显示是对数据进行多角度的表现,可通过数字、图形等形式。数据存储是对数据以文件的形式加以保存,便于数据的再现和数据的管理。其硬件图如图3。

三、软件的设计

软件的总体设计包括嵌入式Linux文件系统设计、网络通信程序设计、数据采集程序设计、控制组态与驱动程序的设计。为了完成必要的数据采集,工况监控,实时显示显示动态的图形流程,实时显示测量数据,系统采取了多线程技术来实现实时功能,以满足系统要求。采用多线程技术时,应合理划分子线程,并解决好各线程间的同步问题。

测控对象的特征信息能否及时准确的提取是影响后续处理过程的关键,因此信息采集功能必须采用单独的线程来管理,并尽量具有较高的线程优先级别。控制功能设计的好坏直接影响到整个系统能否正常运转,须采用单独的子线程。数据处理方法一般要占用较长的时间片,为保证系统人机交互的流畅,数据处理功能应单独采用子线程管理。如要求采集数据的实时显示,则数据显示输出功能应单独设置为一个子线程。如不需要实时显示,则可将数据显示输出功能放在人机交互操作放在主线程中处理。

故障诊断系统的主线程负责所有线程的总体调度和控制,主线程将各任务分派给各子线程,并显示各种警报和错误信息系统中,数据实时采集显示时开启的线程数量最多,采集线程将数据存放到“数据池”,并设置一个标志位,提示显示线程实时更新数据,它还要接受来自主线程和控制线程的命令。控制线程接受主线程的命令,监控设备运转情况,必要时发送消息到采集线程停止或开启采集操作。显示线程以合理的方式显示后台数据处理线程的数据结果。主线程接受各种人机交互操作,并发送到相应线程处理。采集线程、控制线程间通信流程图如图4。

根据以上的想法编制程序,移植数据采集程序对两次采集程序设置标准,符合标准的数据作为保留的采集数据,然后从数据库里,读取相应的数据进行比较。以下是部分程序:

通过以上程序就可以实现数据的比较与计算。再经过进一步的数据处理就可以输出到驾驶室内的液晶显示器上。

四、结论

介绍了一种全新的基于ARM的车载状态检测与故障诊断系统,它不仅可以让驾驶员实时监测汽车检测与故障诊断,及早发现故障,避免不必要的损坏,而且指导方便维修人员对汽车进行必要的维护与修理。

随着技术的发展与汽车保有量的增加,嵌入式车载状态监测与故障诊断系统必将作为一种常见的汽车电气装入汽车中,体现了广阔的发展前景。

参考文献

[1]杨杰等.基于模型的故障诊断中的模糊建模与推理[J].上海交通大学学报.1999,33(4):418~421

[2]舒红宇等.面向汽车零部件试验的通用测控平台设计与实现[J].重庆大学学报.2006,29(9):14~18

[3]贾继德等.内燃机故障信号特性分析及诊断策略[J].农业机械学报.2005,36(12):39~42

[4]陈波,马孝江.故障诊断专家系统中的数据库子系统设计[J].机械工程学报.2002,38:186~189

[5]姚剑飞等.基于故障原因-征兆矩阵的故障诊断专家系统[J].振动、测试与诊断,2009,29(1):74~78

作者:丁鹏

网络通信程序设计论文 篇3:

基于Windows套接字编程的网络编码仿真实现

摘 要:针对网络编码数据传输技术,采用Windows套接字编程工具,提出了一种仿真实现方法。在局域网内选取若干个终端模拟网络节点,逻辑上构成一个单源组播网络,各终端上采用socket套接字编程方法,按照网络编码数据传输策略进行收发数据。给出的例子是典型的蝴蝶网络,但容易扩充到一般的单源组播网络。与已有的网络编码仿真器相比,提出的方法具有简便、易于掌握的特点。

关键词:线性网络编码;蝴蝶网络;套接字编程;仿真实现

Simulation Implementation of Network Coding Based on Windows Socket Programming

SHEN Ming,PU Bao-xing*,TANG Bin

(Department of Information engineering, Shaoyang College, Shaoyang 422001,Hunan, China)

【Key words】linear network coding; butterfly network; socket programming ;simulation implementation

0 引 言

网络仿真在网络技术的教学和科研中具有重要意义,它为理解网络理论、研究和应用网络技术提供了方便的分析工具,同时也是一种有效研究方法。网络编码[1]是一种新型的数据传输技术,它是传统路由传输技术的扩展:节点不仅进行信息转发与复制,还可以进行信息编码。因网络编码具有能提升网络的吞吐量,增加网络的安全性和鲁棒性等优点[2,3],从而得到了深入广泛的研究。对于网络编码研究过程中的实验环节和仿真实现,目前通常采用自编模拟程序的方式[4,5],但该方式不直观,且不利于对实验结果的分析比较,同时,对某些应用性能存在争议[6];还有一些学者选择NS这一网络仿真平台[7],但NS本身只支持节点的路由传输,而不支持节点的编码传输,从而必须对其进行扩展,由于NS的复杂性,扩展具有一定的难度;此外,还可以采用硬件的方法构造实验平台实现[8,9],但必须采用特殊的硬件,实现起来较麻烦。本文提出了一种简便的网络编码仿真实现方法,它不需要特定的软、硬件支持,同时又不同于软件仿真,具有一定的直观性。在局域网内选取若干终端来模拟网络节点,构成逻辑上的单源组播网络,根据网络编码数据传输策略,各节点采用Windows套接字编程[10]方法实现数据的接收与发送,宿点对接收到的数据进行解码而恢复出源点播出的信息。实验表明,提出的方法是有效的,且该方法具有软硬件要求低、操作方便的特点,并易于掌握。尽管本文给出的是一个较为简单的网络拓扑结构:蝴蝶网络[11],但提出的方法适用于一般的单源组播网络。提出的方法为网络编码数据传输技术提供了有效的仿真实现方法,对网络编码的科研和教学具有重要的意义。

1 网络编码数据传输技术

网络编码是路由技术的扩展,除继承了路由传输技术的信息复制与转发功能外,还允许网络节点对信息进行编码后再传输,信息编码建立在有限域上,即编码是各信息在有限域上的线性组合(线性网络编码),宿点从所有的输入信道收到信息后,必须通过联立方程,求解线性方程组才能恢复出源点的信息。

图1是典型的蝴蝶网络,在不少文献中用于描述网络编码的原理,它是一个有向无环单源组播网络,其中节点S是源点,T1和T2是宿点,节点2、3、4、5为中间节点。设每条链路的信道容量均为1,即每条链路在单位时间内最多只能传输一个字符,而源点S欲通过网络组播信息至两个宿点T1、T2。若采用路由传输技术,因为节点4至节点5的信道是数据传输的瓶颈,则在一个时间单元内,源点最多只能组播一个字符至两个宿点,若采用网络编码技术,则可以组播两个字符。在同一时间单元内,设源点S要组播两个字符a和b至宿点,则其数据传输过程如下:

①S把字符a传输至输出信道,把字符b传输至输出信道

②节点2从信道上接收到字符a后,把它分别转发至输出信道<2,T1>和<2,4>;节点3从信道上接收到字符b后,把它转发至输出信道<3,4>和<3,T2>。

③节点4分别从信道<2,4>和<3,4>上接收字符a和字符b后,对接收到的信息进行编码,即作异或运算:c=a⊕b,然后把编码后的信息c分别传输至输出信道<4,5>。

④节点5从信道<4,5>收到信息c后,把它分别传输至信道<5,T1>和<5,T2>。

⑤宿点T1分别从信道<2,T1>和<5,T1>上收到信息a和c后,作异或运算a⊕c,得到b,从而宿点T1接收到了源点播出的信息a和b;同理,宿点T2分别从信道<3,T2>和<4,T2)上收到信息b和c后,作异或运算c⊕c,得到a,从而宿点T2也接收到了源点播出的信息a和b。

图1 蝴蝶网络

3 Windows套接字编程技术

Windows的API提供了一系列的套接字编程函数,用于网络通信程序设计[10]。它的函数声明位于头文件winsock2.h中,其函数体包含在“W_32.lib”中,编程时以动态链接库的形式实现,从而程序中必须把相应的头文件和动态链接库加入。程序开始执行时,必须调用WSAStartup函数对动态链接库的调用进行初始化,当网络编程结束,必须调用WSACleanup函数来解除动态链接库的加载并释放一定的资源。

Windows API提供了套接字编程方法来实现数据的发送与接收,有三种套接字:流式套接字,数据报套接字和原始套接字。其中流式套接字可以实现TCP协议,数据报套接字可以实现UDP协议,原始套接字可以实现IP协议。套接字是数据发送与接收的窗口,并与一个三元组相联系,这个三元组包括“网络协议、IP地址和端口号”,当套接字与这个三元组相联系时,则可以通过该套接字发送或接收数据,当发送数据时,数据从该IP地址对应的网卡中以相应的端口号把数据发送至网络;当接收数据时,凡从网络上发往本机上相应端口号的数据,均可以从该套接字中读出。本文采用数据报套接字,其工作方式为阻塞模式。接收数据与发送数据的编程方法如下所述。

3.1 数据接收方的工作过程

创建数据报套接字:采用socket函数创建数据报套接字。

SOCKET sockSrv=socket(AF_INET,SOCK_ DGRAM,0)

②定义一个地址变量,用于保存本机IP地址和相应的端口号,并把该地址变量与创建的套接字绑定。

SOCKADDR_IN addrSrv;

addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ ANY);//本机IP地址

addrSrv.sin_family=AF_INET;//TCP/IP协议

addrSrv.sin_port=htons(20012);//选定一个端口号

bind(sockSrv,(SOCKADDR*)&addrSrv,len);//把套接字与三元组地址绑定。

③从套接字上接收数据:调用recvfrom函数,从套接字中接收数据。

Int datalen=recvfrom(sockSrv,rcvbuff,bufflen,DDR*)&addrSrv,&len)。

其中rcvbuff是接收数据缓冲区的首地址,bufflen是一个整数,为接收数据缓冲区的长度,len是一个整型变量,其值等于sizeof(addrSrv)。当函数调用结束,datalen中保存了实际接收的字节数。

④关闭套接字:当数据接收完毕,则需要调用closesocket(sockSrv)函数关闭套接字。

3.2 数据发送方的工作过程

①创建数据报套接字

②把接收方的IP地址和相应的端口号保存在一个地址变量中;

③调用sendfrom函数,通过套接字和地址变量发送数据;

sendto(sockClient,sendBuff,len1,0,(SOCKADDR*)&ad drSrv,len);

其中sockClient是数据报套接字,sendBuff是发送数据缓冲区的起始地址,len1是要发送数据的字节数,addrSrv是保存了数据接收方的三元组的地址变量。

④关闭套接字。

在发送和接收数据时,接收方的IP地址与端口号必须与发送方指定目标地址的三元组一致。

4 网络编码数据传输技术的仿真

针对图1的蝴蝶网络,在局域网络选定6个终端,不妨设这7个终端在同一个C类地址(172.16.101)的网段内,其IP地址与端口号的设置如图2所示。

这7个终端的主机号分配如下:S:11,2:12,3:13,4:14, 5:15,T1:16,T2:17,从而S的IP地址为172.16.101.11,其余节点的IP地址可以类推。假设需要从节点S发送数据至宿点T1和T2,发送的数据是一个字符串“abcdefghijklmnopqrstuvwxyz”, 也可以是内容任意的字符串,长度不加限制,若字符串的长度太长,可以采用多次发送。

在采用套接字编程时,还必须为套接字设置端口号,各数据传输链路的端口号如下:

:20012,:20013,<2,T1>:20026,<2,4>: 20024,<3,4>:20024,<3,T2>:20037,<4,5>:20045,<5, T1>:20056,<5,T2>:20057。

图2 网络节点的IP地址和端口号分配

4.1 源点S

定义存贮字符串的缓冲区senbuff,并把要发送的字符串存入该缓冲区中。把该字符串分成相等的两部分,每一部分的长度各为strlen(sendbuff)/2,然后把每一部分作为UDP数据通过图2中指定的端口号发送至指定的节点,其程序段如下: SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);//创建数据报套接字

Char sendBuff[]="abcdefghijklmnopqrstuvwxyz"; //发送缓冲区SOCKADDR_IN addrSrv1,addrSrv2;

addrSrv1.sin_addr.S_un.S_addr=inet_addr("172.16.101.12");//节点2的IP地址

addrSrv1.sin_family=AF_INET;

addrSrv1.sin_port=htons(20012);//数据传输信道的端口号addrSrv2.sin_family=AF_INET;

addrSrv2.sin_addr.S_un.S_addr=inet_addr("172.16.101.13"); //节点3的IP地址

addrSrv2.sin_port=htons(20013);//数据传输信道的端口号

int len=sizeof(SOCKADDR),len1=strlen(sendBuff);

sendto(sockClient,sendBuff,len1/2,0,(SOCKADDR*)&addrSrv1,l en);//把字符串的前一半发送至节点2

sendto(sockClient,sendBuff+len1/2,len1/2,0,(SOCKADDR*)&addr Srv2,len);//把字符串的后一半发送至节点3

closesocket(sockClient);

4.2 节点2

节点2从源点接收数据,然后分别转发至下游节点,因此需要定义两个套接字,一个套接字用于接收数据,另一个套接字用于发送数据,相应的收发数据的程序段如下: SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0); //创建用于接收数据的套接字

SOCKET sockclient=socket(AF_INET,SOCK_DGRAM,0);//创建用于发送数据套接字

char rcvbuff[100];//接收缓冲区

int len=sizeof(SOCKADDR);

SOCKADDR_IN addrSrv,addrclient1,addrclient2;//前一个为接收地址,后两个为发送地址 addrSrv.sin_addr.S_un.S_ addr=htonl(INADDR_ANY);//本机IP地址

addrSrv.sin_family=AF_INET;

addrSrv.sin_port=htons(20012);//接收数据的端口号,与S发送数据端口号一致

addrclient1.sin_family=AF_INET; a d d r c l i e n t 1 . s i n _ port=htons(20024);

addrclient1.sin_addr.S_un.S_addr=inet_addr("172.16.101.14");

addrclient2.sin_family=AF_INET; a d d r c l i e n t 2 . s i n _ port=htons(20026);

addrclient2.sin_addr.S_un.S_addr=inet_addr("172.16.101.16");

bind(sockSrv,(SOCKADDR*)&addrSrv,len);//把套接字与三元组地址绑定

int len3=recvfrom(sockSrv,rcvbuff,100,0,(SOCKADDR*)&addrSrv,&len);//接收数据

rcvbuff[len3]=’’; printf("%s",rcvbuff);

sendto(sockclient,rcvbuff,len3,0,(SOCKADDR*)&addrclient1,l en);//转发至节点4

sendto(sockclient,rcvbuff,len3,0,(SOCKADDR*)&addrclient2,l en);//转发至节点6

closesocket(sockSrv);closesocket(sockclient);

4.3 节点4

节点4分别从端口号20024和端口号20034中接收UDP数据包(这两个数据包等长),然后对这两个数据包的数据逐位作异或运算,再把异或的结果作为UDP数据发送至节点5。程序段如下: SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);//创建接收数据的套接字,

SOCKET sockclient=socket(AF_INET,SOCK_DGRAM,0);//创建发送数据的套接字,

char rcvbuff1[100],rcvbuff2[100];//接收缓冲区

int len=sizeof(SOCKADDR);

SOCKADDR_IN addrSrv,addrclient;//前者用于接收数据,后者用于发送数据 addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ ANY);//本机IP地址

addrSrv.sin_family=AF_INET;

addrSrv.sin_port=htons(20024);//与节点2和节点3发送数据时指定端口号一致

addrclient.sin_family=AF_INET;

addrclient.sin_port=htons(20045);

addrclient.sin_addr.S_un.S_addr=inet_addr("172.16.101.15");int len3=recvfrom(sockSrv,rcvbuff1,100,0,(SOCKADDR*)&addrSr v,&len);//接收第一个数据包

rcvbuff1[len3]=’’;printf("%s",rcvbuff1);

int len4=recvfrom(sockSrv,rcvbuff2,100,0,(SOCKADDR*)&addrSr v,&len);//接收第二个数据包

rcvbuff2[len4]=’’;printf("%s",rcvbuff2);unsigned char*pu1,*pu2;

pu1=(unsigned char*)rcvbuff1;pu2=(unsigned char*)rcvbuff2;

/*以下对接收到的数据包进行按位异或运算*/ for (int i =0;i

pu1++;pu2++;}

sendto(sockclient,rcvbuff1,len3,0,(SOCKADDR*)&addrclient1,l en);//发送数据至节点5

closesocket(sockSrv);closesocket(sockclient);

4.4 宿点T

宿点T1从指定端口接收UDP数据包,析出数据部分,然后对两部分数据进行逐位异或运算。即:分别接收来自端口号20026和20056的数据,它记为M和N,显然,M和N是等长的,然后作异或运算M⊕N,并把结果联接到M的后面,则便是源点播出的完整数据。宿点T1的程序段如下: SOCKET sockSrv1=socket(AF_INET,SOCK_DGRAM,0);//创建套接字char rcvbuff1[100],rcvbuff2[100];//接收缓冲区

int len=sizeof(SOCKADDR);

SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_ addr=htonl(INADDR_ANY);//本地IP地址

addrSrv.sin_family=AF_INET;

addrSrv.sin_port=htons(20026);//接收来自信道(2,6)的数据

bind(sockSrv,(SOCKADDR*)&addrSrv,len);//把套接字与三元组地址绑定

int len3=recvfrom(sockSrv,rcvbuff1,100,0,(SOCKADDR*)&addrSr v,&len);//接收数据

rcvbuff1[len3]=’’;

printf("%s",rcvbuff1); addrSrv.sin_port=htons(20056);//接收来自信道(5,6)的数据端口

bind(sockSrv,(SOCKADDR*)&addrSrv,len);//把套接字与三元组地址绑定

int len4=recvfrom(sockSrv,rcvbuff2,100,0,(SOCKADDR*)&addrSrv,&l en);//接收数据

rcvbuff2[len4]=’’;

unsigned char *pu1,*pu2;

pu1=(unsigned char*)rcvbuff2;pu2=(unsigned char*)rcvbuff1; int i;

for (i=0;i

{ *pu1=(*pu1)^(*pu2);

pu1++;pu2++;}

printf("%s",rcvbuff2); closesocket(sockSrv);

}

以上只列出其中几个节点的工作过程和相应的程序段。从图2可以看出,节点3、节点5与节点2的工作过程相同,宿点T2与宿点T1的工作过程相同,从而很容易地写出其它节点的程序段。

4.5 程序的执行

当上述各节的程序录入后,则必须按一定的顺序运行各节点的程序,即按T1,T2,5,4,3,2,S的顺序启动程序运行,当节点S的程序运行后,宿点T1和T2收到源点S播出的信息。

5 结束语

采用Windows套接字编程工具,提出了一种网络编码数据传输技术的仿真实现方法。在局域网内选取若干个终端模拟网络的节点,在逻辑上构成一个单源组播网络,各终端上采用socket套接字编程方法,按照网络编码数据传输策略进行收发数据。给出的例子是典型的蝴蝶网络,但该方法能容易地扩展到一般的单源组播网络。与已有的网络编码仿真器相比,提出的方法具有直观、简便、无需额外的软硬件支持、易于掌握的特点。

文中采用了数据报套接字的阻塞模式编程,同样也可以采用非阻塞模式;此外,在网络编码的仿真计算中,有时更需要测试网络的吞吐率、各节点的编/解码时间,并与路由传输方式进行比较,针对这方面的仿真实现,需要做更深一步的研究。

参考文献

[1] 陶少国,黄佳庆,杨宗凯等.网络编码研究综述[J].小型微型计算机系统,2008,29(4):583-592.

[2] Chi K,Yang C,Wang X.Performance of network coding based multicast[J].IEEE Proceedings: Communications,Ju ne,2006,153(3):399-404.[3] 唐巧燕,孟相如,王建峰.网络编码对组播通信的性能改善[J].计算机工程与应用,2007,43(3):150-153.

[4] Chi K,Jiang X J,Horiguchi S,et al.Topology design of network-coding-based multicast networks[J]. IEEE Transactions on Parallel and Distributed Systems,2008,19(5):627-640.

[5] 蒲保兴,王伟平. 线性网络编码运算代价的估算与分析[J].通信学报,2011,32(5):47-55.

[6] Wang M,Li B C.How practical is network coding[C].The 14th IEEE Int’1 workshop on Quality of Service(IWQos 2006),New Haven,CT,2006.

[7] 李令雄,洪江守,龙冬阳. NS 仿真器的一个网络编码扩展[J].计算机科学,2009,36(7):71-73.

[8] Gibb G, Lockwood J, Naous J et al. NetFPGA - an open platform for teaching how to build gigabit-rate network switches and routers[J]. IEEE Transactions on Education, 2008,51(3):364–369.

[9] 张明龙,李挥,李亦宁等.基于网络编码多信源组播通信系统[J].电子产品世界,2011.3:23-25.

[10] 王艳平.Windows网络与通信程序设计[M].北京:人民邮电出版社,2006.

[11] Fragouli C,Boudec J Y L,Widmer J. Network Coding: An Instant Primer[J].ACM SIGCOMM Computer Communication Review,2006,36(1):63-68.

作者:沈明 蒲保兴 唐彬

上一篇:电视媒体文化旅游论文下一篇:公路软基路堤设计论文