2014-09-05 10:31:49
来源:中国数字视听网
主要功能需求分析和模型构建
对于网络直连,硬件如图1所示,用网络直连线将PC机和显示屏连接起来,然后手动设置它们的IP地址在同一个网段,即可进行通信了。
但采用这种方式,如果事先不知道显示屏的IP地址,将很难进行通信。为了达到不知道显示屏IP地址也能实现PC机与显示屏直连通信的目的,可借助DHCP服务原理来解决:即设置LED显示屏为某固定IP地址的DHCP服务器,设置PC机网卡为自动获取IP地址的方式,通过DHCP服务功能,自动配置PC机的网卡IP地址,这样网络连接通道就建立了。
有些开发商就采用这种方式实现了网络直连,但这种方法存在一些问题:其一,由于UDP通信为不连接通信,其通信可靠性要差一些,容易失败;其二,只能通过操作系统自带的系统完成,没有干预,用户不能设置超时,有时等待时间太长,最长为60秒;其三,DHCP为固定IP方式,在实际应用中显然不太好;其四,退出系统时,不能恢复PC机原有的网卡配置信息。
基于此,经过研究,本文提出一种新的网络直连方法,可以实现网络直连、自动获取IP地址以及实现PC机网卡配置信息保存和恢复等功能,克服当前实现方法的不足,提高可靠性、稳定性和时效性等各方面性能,其系统模型如图2所示,主要功能和工作流程如下:
(1)启动系统时,检索、访问PC机的所有网卡,并保存其网卡配置信息,供退出系统时恢复;(2)启动网络直连进程;(3)广播IP地址请求数据包;(4)返回IP地址数据包;(5)解包,获取PC机和LED显示屏的IP地址,设置PC机的IP地址;(6)返回LED显示屏的IP地址,关闭网络直连,完成通信通道的建立;(7)建立PC机和LED显示屏的通信通道后,即可对显示屏进行读/写参数、发送节目、开关屏等通信控制操作;(8)退出系统时,根据(1)保存的网卡配置信息,恢复PC机网卡的原始状态。
在以上流程中,(2)~(6)是核心过程,它模拟DHCP服务,实现PC机广播请求IP地址,获取PC机IP地址并设置,上传LED显示屏IP地址,完成网络直连通道的建立,是进行网络直连操作时必做的步骤;(1)和(8)是启动和退出系统时所做的保存PC机网卡配置信息和恢复网卡配置信息操作;(7)是在完成网络直连通道后进行的显示屏控制的一般操作。本文重点介绍前两者。
关键功能的设计和实现
2.1保存PC机网卡配置信息
用来调试显示屏的PC机,一般是一机多用,在调试显示屏的同时,还用来办公、上网,其网卡IP地址可能是固定的或自动获取的。在做网络直连时,可能会改变其IP地址,为了不影响用户的工作,退出时需要自动恢复其IP地址。而要做到这一点,可在启动LED控制软件时,读取当前网卡配置信息,如IP地址、网卡名、MAC地址、网卡类型、是否是自动配置IP地址等等,将这些信息放入一个链表中保存,同时设置一个标识,记录用户在调试显示屏的过程中,是否使用过网络直连操作,待退出系统时使用。
在Windows操作系统中,可使用IPHelper接口来读取网卡信息,它是一套用于管理本地网络设置的API,通过它使用IP_ADAPTER_INFO结构,可以方便地提取上述网卡配置信息,保存到链表中。
2.2借鉴DHCP服务原理,构建网络直连通道
要实现PC机和LED显示屏网络直连通信,必须解决两个关键问题:其一,让PC机和LED显示屏在同一个网段;其二,知道LED显示屏的IP地址。
除此之外,还要解决多网卡、无线网卡对网络直连的干扰等现象。借鉴DHCP原理,主要解决思路如下:
(1)在PC机端设计一个网络直连控制进程;(2)需要网络直连时,启动该进程,通过Windows相关网络API函数和注册表信息,确定与LED显示屏连接的非无线网卡,将其MAC地址放入构建请求IP地址的UDP数据包中,然后广播出去,同时启动内部UDP包捕获子进程;(3)LED显示屏收到请求IP地址的UDP包后,根据本身IP地址,构造一个PC机的IP地址,将其广播出去,为了不引起混乱,这里构建的是伪DHCP包,正常的Windows客户端收到该UDP包时,并不会自动改变其IP地址;(4)网络直连控制进程的UDP包捕获子进程接收到分配的IP地址的UDP包后,解包得到PC机的IP地址和LED显示屏的IP地址;(5)设置PC机网卡IP地址,上传LED显示屏的IP地址给控制软件,成功后,关闭网络直连控制进程,完成网络直连通道的建立。
这个网络直连的过程涉及三个系统:(1)网络直连控制进程,它构建请求IP地址UDP数据包并广播出去,同时监控目标网卡的68端口,捕获返回的UDP数据包,解析出PC机的IP地址和LED显示屏的IP地址,然后设置PC机的IP地址,将LED显示屏的IP地址提交给主进程,完成网络直连的任务;(2)LED显示屏DHCP服务子进程,它接收PC机的IP地址请求,构建并设置自身IP地址,并返回PC机的IP地址的伪DHCP包;(3)LED控制软件,当用户选择网络直连方式时,启动网络直连控制子进程,实现网络直接通道的建立,完成后,关闭该进程。
2.3恢复PC机网卡的配置信息
退出系统时,根据2.1保存的是否使用过网络直连的标识进行判断,如果没有使用过网络直连方式,则无需执行网络IP恢复功能;否则将执行恢复功能,还原2.1保存的网卡配置,恢复网卡IP地址可使用netshinterfaceipset命令。
同时,为了加快处理速度并提高成功率,可按禁用网卡、设置网卡IP地址、再启用网卡的步骤实施:
(1)使用Windows的SetupAPI相关接口API函数禁用目标网卡;(2)恢复目标网卡IP设置,根据静态IP地址和动态IP地址,分别用不同的命令:
a.恢复静态IP地址命令。
netshinterfaceipsetaddressname=“本地连接”
source=STaticaddr=192.168.1.19mask=255.
255.255.0gateway=none.
b.恢复动态IP地址命令。
netshinterfaceipsetaddress“本地连接”dhcp
(3)使用SetupAPI相关接口API函数启用目标网卡,这样就完成了网卡配置信息的恢复。
结论
本文针对LED显示屏调试过程中对网络直连的需求,提出一种网络直连的方法,系统在启动时自动保存网卡配置信息,使用网络直连进程构建网络直连通道,退出系统时自动恢复网卡配置信息,使用户无需知道LED显示屏的IP地址,也不用修改PC机的IP地址,便可实现PC机与LED显示屏的网络通信。该方法在LED导航者软件中使用,其可靠性、稳定性和时效性得到了用户的认可,取得了良好的效果。实践证明,该方法可为类似的应用提供一种可供借鉴的解决方案。