物联网应用中的跨平台数据通信

2019-09-19 11:34顾家铭
电脑知识与技术 2019年20期
关键词:物联网

摘要:5G网络的到来,将开启“万物互联”时代。物联网技术就是使各种设备都能接入网络,需要实现跨平台的数据通信。为了解决这一问题,模拟办公楼安防监测系统,设计了一个桌面端和移动端通信的方案。该方案充分利用Socket技术优势,采用UDP协议,实现了C#平台和Android平台的数据通信。移动端通过ADAM4150采集火焰、烟雾、红外对射的信号状态,并将采集的信号状态发送给桌面端。桌面端编程语言是C#,采用WPF框架实现表现层开发,接收移动端通过网络发送的信号状态。

关键词: 物联网;Socket编程;C#;Android

中图分类号:TP311        文献标识码:A

文章编号:1009-3044(2019)20-0015-03

开放科学(资源服务)标识码(OSID):

近几年来,随着物联网技术的发展,智能医疗、智能交通、智能家居、智能物流以及智慧城市的研究和应用非常广泛,物联网正在悄然改变我们的生活,使人们的生活更加便捷和舒适[1]。5G网络的到来,将开启“万物互联”时代。物联网技术就是使各种设备都能接入网络,实现跨平台的数据通信。一般的物联网应用程序都支持电脑、手机和平板等多种设备使用,需要实现桌面端和移动端的跨平台通信。

目前,C#已经成为开发物联网桌面端的主流语言,而Android成为开发物联网移动端的主流语言。标准的Socket通信技术可以实现任何平台和任何进程之间的通信,在PC端和Android手机端通过有线或无线的连接情况下,实现两端设备的Socket连通[2]。

1 实现通信的关键技术

1.1 Socket通信原理

Socket的英文原义是“孔”或“插座”,也被称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄,可以实现不同系统之间的通信[3]。在TCP/IP网络中,应用程序通过“套接字”发出请求或应答请求,“套接字”采用客户端/服务器端(Client/Server, C/S)模式。“套接字”之间的连接过程分为三个步骤:1)服务器监听:服务器实时监听网络状态,处于等待连接的状态;2)客户端请求:由客户端“套接字”提出连接请求,连接的是服务器端的“套接字”;3)连接确认:当服务器端“套接字”监听到客户端“套接字”的连接请求后,它就激活一个新进程处理客户端请求,两端连接上后可进行数据传输的操作。而服务器“套接字”继续处于监听状态,接受其他客户端“套接字”的连接请求。

Socket有两种操作方式:面向连接和无连接的。面向连接的操作使用TCP协议,这种方式在正式发送数据前,必须和对方建立可靠的连接。一个TCP连接必须经过三次握手才能建立起来,TCP对应的是可靠性要求高的应用;而无连接的操作方式使用UDP协议,这种操作在正式通信前不必与对方先建立连接,不管对方状态就直接发送数据。UDP对应的是可靠性要求低、通信效率高的应用。

1.2 C#中的Socket编程

C#语言简洁的语法和强大的功能使套接字编程变得十分简单,在命名空间System.Net.Sockets中,Socket类提供了对套接字的支持[4]。应用程序通过TcpClient类和TcpListener类使用传输控制协议(TCP),通过UdpClient使用用户数据文报协议(UDP),而TcpClient、TcpListener和UdpClient这些协议类都是建立在Socket类的基础之上,负责数据传输的细节工作。

网络通讯中的所有数据都是以字节的形式进行传输的,因此必须把数据转化为byte[]的类型。命名空间System.Text中的Encoding类,可以实现字符串和字节数组的相互转换,而System命名空间中的BitConverter类,则实现基础数据类型与字节数组的相互转换。

1.3 Android中的Socket编程

Android编程使用的是Java语言,因此Java Socket网络编程在Android平台都是适用的,但Android平台也有其特殊性之处。Socket編程通常采用客户端/服务器端(Client/Server, C/S)模式,服务器必须有一个固定的IP地址,才能接收客户端的请求。而手机的IP地址是由运营公司动态分配的,所以Android端通常运行的是客户端程序[5]。

Java在包java.net中提供所有与网络通信相关的类。其中,InetAddress类封装了IP地址,利用该类可以获取IP地址和主机地址等信息。ServerSocket类表示服务器套接字,通过指定的端口监听请求,建立连接后进行数据交互。Socket类表示客户端套接字,用于向服务器发出请求连接,连接建立后也可进行数据交互。

2 系统设计

2.1 总体设计

模拟办公楼安防监测系统,设计一个桌面端和Android移动端通信的模型。系统启动后,桌面端接收移动终端通过网络发送的火焰、烟雾、红外对射的信号状态,并将各信号的状态显示在界面上,使用网络摄像机实现视频监控和记录功能。移动端使用 ADAM4150 数字量采集器采集火焰、烟雾、红外对射信号并实现对报警灯和照明灯的控制,使用网络摄像机获取实时图像。系统有线信号拓扑图如图2所示。

系统采用UDP协议进行跨平台通信。UDP就是用户数据报协议,处于互联网参考模型的第四层-传输层,它是一种无连接不可靠的信息传输。相比于TCP协议,UDP协议少了三次握手建立连接、维护连接和释放连接等一系列过程,因此具有很小的资源消耗和处理速度快的优点。

2.2 C#桌面端设计

桌面端的开发环境为Visual Studio 2012 和 SQL Server 2008R2,编程语言为C#,使用WPF框架实现表现层开发。WPF提供了统一的编程模型、语言和框架,真正做到了界面设计与开发工作的分离[6]。桌面端接收移动终端通过网络发送的火焰、烟雾、红外对射的信号状态,并将各信号的状态显示在界面上。楼宇安防系统主界面设计如图3所示。

桌面端应用程序,创建一个UdpClient对象,并将它绑定到端口号10000。创建一个线程,监听数据。在接收数据线程中,首先调用Receive()方法返回远程移动端发送的 UDP 数据报,然后解析UDP数据报,最后调用Dispatcher.Invoke()方法更新界面上的UI元素,如红外对射、火焰、烟雾的状态。以下是桌面端的关键代码。

2.3 Android移动端设计

Android移动端的开发环境为Eclipse 4.2.2 和 Android SDK。移动端应用程序,使用 ADAM4150 数字量采集器实时采集火焰、烟雾、红外对射信号状态,并显示在界面上,同时将采集到的信号状态发送给桌面端。当检测到火焰或烟雾时,亮起报警灯。如果启用了“入侵报警”,当检测到红外对射信号,亮起报警灯。楼宇安防监测系统移动端界面设计如图4所示。

移动端应用程序,首先创建一个DatagramSocket实例对象建立Socket服务,调用connect()指定要发送的远端IP地址和端口号;然后创建一个DatagramPacket实例对象,将要发送的红外对射、火焰、烟雾的信号状态打包到DatagramPacket中去;调用DatagramSocket中的Send()方法发送数据;最后关闭Socket服务。

3 结语

为了解决物联网应用系统中的跨平台通信的问题,模拟办公楼安防监测系统,设计了一个桌面端和Android移动端通信的模型,利用UDP协议,使用Socket接口实现两端设备的连通。桌面端利用C#语言编写应用程序,并且使用WPF框架实现表现层开发,可以接收移动端通过网络发送的火焰、烟雾、红外对射的信号状态,并且将状态显示到界面上。而移动端通过ADAM4150采集火焰、烟雾、红外对射的信号状态,即显示在界面上,又将信号状态发送到桌面端。另外本设计还可以应用到物联网的其它应用领域。

参考文献:

[1] 王昊. 基于工控机平台智能家居系统设计与实现[D].山东:山东大学,2016.

[2] 何诚, 邵乾飞, 袁浩, 等.基于Socket实现Android(java)与C#的同步通信[J].无线互联科技,2015(2):15-16.

[3] 杨文珺, 王志杰. C#物联网应有程序开发[M].北京:机械工业出版社,2017.

[4] 张凌晓, 袁東锋, 刘克成. Visual C# 2010程序设计[M].北京:中国铁道出版社,2013.

[5] 林志红. Android Socket网络编程体会[J].科学技术创新,2017(28):140-141.

[6] 顾家铭. WPF在物联网环境监测系统中的应用[J].电脑知识与技术,2018,14(17):287-288.

【通联编辑:王力】

猜你喜欢
物联网
基于LABVIEW的温室管理系统的研究与设计
论智能油田的发展趋势及必要性
中国或成“物联网”领军者