winsock技术在远程监控中的应用



  摘要:本文根据winsock技术及网络通信原理, 利用vc++编程技术,通过网络数据传输在客户端得到实时温度运行图形,实现了对人工气候室温度运行状况的远程监控, 满足了低成本、高效率的实时自动化要求。

  关键词: winsock 套接字;远程监控;人工气候室;数据传输

  1 引言

  随着网络技术的不断发展进步,网络对整个社会产生了深远的影响。由此也出现了以网络为基础的监控管理新框架。实现基于网络的设备远程监控,成了目前计算机网络应用领域中的一个热点问题。利用套接字技术,通过socket实现网络之间的连接和数据交换,实现对设备的远程监控,具有很好的应用前景。

  2 人工气候室远程监控系统的特点及实现

  2.1通信接口-----套接字的创建

  本文所要实现的是对一个小型人工气候室的远程监控,在异地或同一个局域网范围内,可以不必亲临现场就可以观测到人工气候室当前的温度状况和运行中的温度曲线,由于在远端只是需要查询和观察,因此只要处理好现场监控计算机和远端客户机之间的通信和数据传输就可以了。这样不用占用现场计算机的cpu处理时间,从而能节省资源以便做更多的处理现场的工作。

  和远端服务器的连接可以分为以下几个过程:

  (1) 服务进程总是先于客户进程启动,服务进程首先创造套接字。

  (2) 将本地地址绑定到所创建的套接字上以使在网络上标识该套接字。

  (3) 将套接字置于监听模式并准备接受连接请求。

  (4) 客户端创建套接字,调用socket函数,方法同上。

  (5) 客户向服务器提出连接请求。

  (6) 当请求到来时,被阻塞服务进程的accept()函数如(3)中所述生成一个新的套接字与客户端建立连接,并向客户端返回接收信号。

  (7) 一旦客户机的套接字收到来自服务器的接收信号,则表示客户机与服务器的连接已就绪,则可以进行数据传输了。

  (8) 关闭套接字。一旦任务完成,就必须关掉连接已释放套接字占用的资源。

  创建连接的服务器端和客户端代码简述如下:

  服务器端:

void cserverview::onstart ()
{ started=true;
 m_start.enablewindow(!started);
 try
 { g_slisten.create(6802,sock_dgram,null);
  g_slisten.bind(6802,m_ip);//,6802为端口号,m_ip为服务器端ip地址
  g_slisten.listen();
  ((cserverdoc*)getdocument())->g_pchatlisten=new cchatlsnsock(
          (canyserverdoc*)getdocument());
  cchatlsnsock* g_pchatlisten=((canyserverdoc*)getdocument())->g_pchatlisten;
  g_pchatlisten->create(9999,sock_stream);//侦听聊天室连接套接字创建
  g_pchatlisten->listen();
  getdlgitem(idc_response)->setwindowtext("开始对客户端服务!");
 }

  服务端开启后的运行界面如图1所示。

  客户端:

void cclientview::onclientstart()
{m_sockrecv.create(6801,sock_dgram,m_clientip);//6801为端口号,m_clientip为客户端ip
 m_sockrecv.bind(6801,m_clientip);
 m_timer1=settimer(1,1000,null);
 m_timer2=settimer(2,250,null);
 getlocaltime(&systime);
 m_starttime=systime;
m_waveplay.setstarttime(systime.wyear,systime.wmonth,systime.wday,systime.whour,systime.wminute,systime.wsecond);//画出曲线初始时间
 this->m_currentsystime.setfocus();
}


图1:服务器端开启服务运行界面

  2.2网络中的数据传输与监控实现

  基于网络的远程控制和测量应用中,一般数据传输采用二进制格式是主丛式,在人工气候室的远程监控系统中,通信双方需要传输的数据流量少,下位机一般是微控制器等嵌入式系统,数据处理能力较慢,通信双方也不必保持紧密联系,因此大多采用udp协议,基于点对点的方式,双方通信的数据可靠性可以通过定义数据表示格式来保证。另外采用把通过网络传输过来的数据在客户端用曲线的形式重画显示,用了一个本人自做的一个activex控件来显示接收的数据,在数据传输过程中存在的滞后时间很短,可以忽略不计。

  在设备运行时,服务器端的状态一直保持开启,测温元件把测量到的温度值传入到控制微机,同时通过网络传到远程客户端,远程连接通过输入服务器端的ip地址,输入指定的用户名和密码,就可以连接上,从而就实现了远程监控。

  建立连接后客户端就可以接收发送过来的温度值且用曲线形式显示出来:

void cclientview::ondatareceive()
{
 extern clistbox* pmylistbox;
 char sztemprecv[20];
 cstring szip(m_ip);//得到服务器端的ip
 uint uport=6802;//指出端口
 int itemprecv=m_sockrecv.receivefrom(szrecv,10,szip,uport,0);
 szrecv[irecv]='/0';
 m_szrecv=sztemprecv;
 m_listbox.addstring((lpctstr)m_szrecv);
 int ncount=m_listbox.getcount();
 if (ncount > 0)
  m_listbox.setcursel(ncount-1);
  getlocaltime(&systemtime);
  m_nowtime=systemtime;
  cstring strsystime;
  strsystime.format(_t("%d-%d-%d %d:%d:%d"),systemtime.wyear,systemtime.wmonth,systemtime.wday,systemtime.whour,systemtime.wminute,systemtime.wsecond);
  updatedata(false);
  curabstime=(m_nowtime-m_starttime).gettotalseconds();
  m_waveplay.setpoint2(curabstime,atoi(m_szrecv));//用自做activex控件画出温度曲线

  完成后通过远程登录看到的运行界面如图2所示。



  3:结束语

  在实际应用中,程序还有聊天功能、查看远程屏幕功能、文件的上传和下载功能,从而更方便与远端进行通信。另外在连接时采用密码和用户名印证方法,从而使监控更加有力,并防止不法用户登录和篡改数据。本论文人工气候室是与韶关医疗器械厂合作的用于生物培养的项目,目前已经投入使用并在区内通过局域网实现了对设备的监控。


图2 当前服务器端人工气候室温度运行情况


 
第一章 简介 1.1 什么是Windows Sockets规范? Windows Sockets规范以U.C. Berkeley大学BSD UNIX流行的Socket接口为范例定义了一套Micosoft Windows下网络编程接口。它不仅包含了人们所熟悉的Berkeley Socket风格的库函数;也包含了一组针对Windows的扩展库函数,以使程序员能充分地利用Windows消息驱动机制进行编程。 Windows Sockets规范本意在于提供给应用程序开发者一套简单的API,并让各家网络软件供应商共同遵守。此外,在一个特定版本Windows的基础上,Windows Sockets也定义了一个二进制接口(ABI),以此来保证应用Windows Sockets API的应用程序能够在任何网络软件供应商的符合Windows Sockets协议的实现上工作。因此这份规范定义了应用程序开发者能够使用,并且网络软件供应商能够实现的一套库函数调用和相关语义。 遵守这套Windows Sockets规范的网络软件,我们称之为Windows Sockets兼容的,而Windows Sockets兼容实现的提供者,我们称之为Windows Sockets提供者。一个网络软件供应商必须百分之百地实现Windows Sockets规范才能做到现Windows Sockets兼容。 任何能够与Windows Sockets兼容实现协同工作的应用程序就被认为是具有Windows Sockets接口。我们称这种应用程序为Windows Sockets应用程序。 Windows Sockets规范定义并记录了如何使用API与Internet协议族(IPS,通常我们指的是TCP/IP)连接,尤其要指出的是所有的Windows Sockets实现都支持流套接口和数据报套接口. 应用程序调用Windows Sockets的API实现相互之间的通讯。Windows Sockets又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值