基于Qt开发环境的多网卡计算机组播通信技术研究


打开文本图片集

摘要:在Qt开发环境下,开发人员可以方便地使用Qt开发库提供的UDP组播通信函数进行软件开发。但在多网卡计算机环境中,使用Qt开发的软件无法绑定指定的网卡接收数据。探讨基于Qt开发环境的多网卡计算机组播通信技术,提出解决上述问题的有效方法。

关键词关键词:Qt;C++;QUdpSocket;组播

DOIDOI:10.11907/rjdk.151853

中图分类号:TP393

文献标识码:A文章编号文章

编号:16727800(2015)011014603

基金项目基金项目:

作者简介作者简介:刘彦平(1984-),男,山西五寨人,硕士,太原卫星发射中心工程师,研究方向为软件开发及维护。

0引言

Qt[1]是诺基亚公司开发的具有优良跨平台特性的C++图形用户界面应用程序框架,它提供给应用程序开发者建立艺术级图形用户界面所需的所有功能。Qt完全面向对象且很容易扩展,并且允许真正地组件编程,已经成为全球众多成功应用程序的基础[2]。Qt最初主要是为跨平台软件开发提供统一、精美的图形用户编程接口而设计,同时也提供了优秀且统一的网络编程接口。Qt的类库类似于MFC的开发库,但Qt的类库封装了适应不同操作系统访问的细节,是支持跨平台的类库,这正是Qt的魅力所在。由于Qt具有良好的跨平台性,可以减少开发者在不同开发平台下应用程序的工作量,可预见Qt的应用将更加广泛[14]。

网络编程是软件开发的主要内容之一,传统方法大多利用套接字 Socket 进行编程,由于套接字包含了众多的函数和数据结构,因此较难掌握与使用。Qt将与网络编程有关的函数和数据结构封装成各种类,使开发人员不用面对各种复杂的 API 函数与数据结构,缩短了开发周期,保证了代码的高效与简洁[5]。但是,在多网卡的计算机环境中使用Qt提供的QUdpSocket类开发应用程序进行组播数据收发时,会出现无法绑定到指定网卡接收数据的现象。本文主要通过对Qt中与UDP组播通信有关的类进行深入研究,解决Qt开发软件在多网卡计算机环境中无法绑定到指定网卡的问题。

1组播通信原理及问题描述

组播即IP多播技术始于上世纪80年代,1988年Steve Deering首次在其博士论文当中提出了IP多播的概念。在TCP/IP通信中有3种通信方式,即单播、广播和组播。单播为一对一的信息传送,对服务质量要求高。广播使用子网内的特殊IP地址,IP地址最后一段为255,进行广播时子网内所有电脑均可收到数据报,通信量巨大,智能低,所以不被允许跨越网段。组播使用IP分组的概念,在路由中建立IP组,并在子网中充分利用硬件多播的方式进行信息传送,组播通过路由传送是允许跨越网段的。由于在子网中利用了硬件多播的方式,不参加组播组的电脑不会收到组播数据报,所以实现了广播,又有效控制了流量,增大了广播范围。

1.1组播通信原理

组播使用IPv4网络中的D类IP地址,范围从224.0.0.0至239.255.255.255,在这个范围当中没有任何主机,而专门用于组播,所以D类IP不允许出现在任何形式的源地址当中[6]。组播开始时,进程首先申请加入一个组播组,之后由主机向路由器发出加入组播组的申请,路由器向所有可以联系到的路由器发出申请,以便接收组播数据。这样就完成了加入组播组的工作[7]。发送组播数据时,先将数据打包进一个UDP数据报,然后发送到路由器,路由器在可以联系到的路由当中使用同一个组的路由,并进行转发。不在同一组的路由和主机不会接收到本组的数据报[8]。通过这种方式既扩大了通信范围,又有效抑制了通信数据量。

组播使用IGMP协议(Internet Group Management Protocol)进行管理[9]。要进行组播的主机必须要有IGMP协议的支持。同时,组播也必须有支持组播的路由器支持,在已有的部分路由器当中,组播并不是默认启动的服务[10]。

3结语

本文使用Qt开发库自带的QUdpSocket类创建的Udp组播通信程序在多网卡计算机中,无法绑定到指定的网卡接收组播数据。通过深入研究Up组播通信的原理和无法接收Udp组播数据的机理,指出了Qt开发库中提供的QUdpSocket类中的bind函数存在Bug,无法在多网卡计算机中绑定到指定的网卡接收组播数据。最后,通过UdpBindFunction类将创建的套接字绑定到多网卡计算机的特定网卡接收组播数据,并巧妙地与利用QUdpSocket类创建的套接字联系在一起,进而可以方便的利用Qt的信号槽等机制实现组播数据的接收。本文可为相关开发人员提供技术参考。

参考文献参考文献:

[1]陆文周.Qt5开发及实例[M].北京:电子工业出版社,2014: 13.

[2]闫锋欣,曾泉人,张志强.C++ GUI Qt4编程[M].北京:电子工业出版社,2013: 1115.

[3]蔡志明.精通Qt4编程[M].北京:电子工业出版社,2008: 231235.

[4]叶保留,顾宝成,陆桑璐,等.组播技术综述[J].小型微型计算机系统,2004,25 (8): 14091414.

[5]雷停.基于QT的跨平台网络通信的设计与实现[J].网络安全技术与应用,2014(5): 4549.

[6]朱利,周俊辉,郑守淇.WINDOWS下组播通信的研究与实现[J].小型微型计算机系统,2000,21(2): 132134.

[7]陈魁.VC++中UDP通信的实现[J].微机发展,2003,13 (9): 3839.

[8]朱三元.网络通信软件设计指南[M].北京:清华大学出版社,1994.

[9]吴捷,杜庆平.Linux下基于Qt4的跨平台聊天系统设计[J].电脑知识与技术,2014,10 (15): 35353537.

[10]王苏敏,陈淦,廖晶晶.Linux系统下基于Qt局域网聊天系统的[J].计算机光盘与软件,2012,(22): 130132.

[11]赵祖龙.基于Qt/Embedded的嵌入式跨平台聊天系统设计[J].信息技术,2010(12): 144147.

[12]周敏.UDP协议下可靠信息传输的研究与实现[J].电脑开发与应用,2011,24(12): 1112.

[13]王艳芳,戴永,刘东华,等.基于UDP的数据可靠传输技术研究与应用[J] .计算机工程与应用,2009(5):20 22.

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

[15]何进,谢松巍.基于Socket的TCP/IP网络通讯模式研究[J].计算机应用研究,2001,18(8): 134135.

[16]白建平,王军锋,闫锋欣,等.Qt高级编程[M] 北京:电子工业出版社 2011: 131138.

责任编辑(责任编辑:陈福时)

推荐访问:技术研究 网卡 组播 通信 环境