程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Winsock技術在遠程監控中的應用

Winsock技術在遠程監控中的應用

編輯:關於C語言

摘要:本文根據Winsock技術及網絡通信原理, 利用VC++編程技術,通過網絡數據傳輸在客戶端得到實時溫度運行圖形,實現了對人工氣候室溫度運行狀況的遠程監控, 滿足了低成本、高效率的實時自動化要求。

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]=;
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. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved