首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

基於 Winsock 的遠程監控系統實戰:人工氣候室溫度實時采集與曲線顯示

     編輯:關於C語言

項目背景

為實現異地對人工氣候室溫度的實時監控,採用 Client/Server 架構:現場工控機(Server)連接傳感器,通過局域網/廣域網將溫度數據發送給遠程客戶端(Client),客戶端繪製實時曲線。要求低成本、高效率、實時性好。

系統架構與通信流程

  1. Server 啟動:創建監聽 Socket,綁定端口 (6802),進入 listen 狀態。
  2. Client 連接:創建 Socket,調用 connect 連接 Server IP:Port。
  3. 建立會話:Server accept 返回新 Socket,雙方確認連接成功。
  4. 數據傳輸:Server 定時讀取傳感器,發送溫度值;Client 接收並繪圖。
  5. 斷開重連:任意一方異常斷開,釋放資源,Client 可重試連接。

關鍵技術選型

  • 協議:數據量小、實時性要求高、允許少量丟包 → UDP (SOCK_DGRAM) 為主;控制指令(登錄、聊天)用 TCP (SOCK_STREAM)。
  • 繪圖:客戶端採用自研 ActiveX 控件 (WavePlay) 繪製實時波形,延遲極低。
  • 安全:用戶名/密碼驗證,防止非法接入篡改數據。

服務端核心代碼 (VC++ MFC)

// 啟動監聽
void CServerView::OnStart() {
    m_Start.EnableWindow(FALSE);
    try {
        // 數據傳輸 UDP Socket
        g_sListen.Create(6802, SOCK_DGRAM, NULL);
        g_sListen.Bind(6802, m_IP);
        g_sListen.Listen(); // UDP 實為綁定後直接收發

        // 聊天室 TCP 監聽
        g_pChatListen = new CChatListenSocket(this);
        g_pChatListen->Create(9999, SOCK_STREAM);
        g_pChatListen->Listen();

        SetDlgItemText(IDC_RESPONSE, _T("開始對客戶端服務!"));
    } catch (CException* e) {
        e->ReportError(); e->Delete();
    }
}

客戶端核心代碼 (數據接收與繪圖)


void CClientView::OnDataReceive() {
    char szRecv[20];
    CString strIP = m_IP; // Server IP
    UINT uPort = 6802;
    int nRecv = m_sockRecv.ReceiveFrom(szRecv, 10, strIP, uPort, 0);
    if (nRecv <= 0) return;
    szRecv[nRecv] = '\0';

    // 顯示原始數據
    m_listBox.AddString(szRecv);
    m_listBox.SetCurSel(m_listBox.GetCount()-1);

    // 計算相對時間(秒)
    SYSTEMTIME st; GetLocalTime(&st);
    CTime now(st), start(m_StartTime);
    double seconds = (now - start).GetTotalSeconds();

    // 繪製曲線點 (ActiveX 控件)
    m_WavePlay.SetPoint2(seconds, atoi(szRecv));
}

擴展功能模塊

  • 聊天室:獨立 TCP 通道 (9999 端口),文本消息廣播。
  • 遠程桌面查看:屏幕捕獲壓縮傳輸(文中提及,代碼未展開)。
  • 文件傳輸:基於 TCP 可靠流實現上傳/下載。
  • 權限控制:登錄驗證 + 會話超時踢出。

部署與測試

項目已在韶關醫療器械廠生物培養項目投入使用,區域局域網內穩定運行。測試顯示:數據傳輸滯後 < 200ms,曲線平滑,長時間運行無內存洩漏。

總結與展望

Winsock 為基礎網絡編程提供了靈活的 Socket 接口。本項目通過「UDP 數據流 + TCP 控制流」混合模式,結合輕量級 ActiveX 繪圖,以極低成本實現了工業級遠程實時監控。未來可遷移至 IOCP/過載完成端口 模式支撐更大規模併發,或引入 TLS 加密提升安全性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved