遠端控制技術在設備維護、系統監控與故障診斷等領域擁有廣泛的應用前景,主流架構多採用 Client/Server 模式。此架構由網路上的多台電腦組成:發起服務請求的稱為客戶端(本地端),響應並處理請求的稱為伺服器端(目標端)。
使用者透過網路連線,客戶端程式發送身分驗證資訊與連線請求;伺服器端驗證通過後建立連線,雙方即可進行指令傳遞與畫面同步。客戶端發送執行指令,伺服器端執行後將鍵盤、滑鼠事件與螢幕重繪資料回傳,客戶端解析顯示,使用者即能如同親自操作遠端主機般進行控制。此模式稱為「基於遠端服務的遠端控制」。
要實現完整的遠端控制,需解決三大核心問題:雙機 Socket 網路通訊、遠端螢幕截取顯示、螢幕資料傳輸與控制邏輯。
基於 Windows 平台的 Winsock 程式設計流程如下:
WSAStartup 載入 DLL,版本資訊存於 WSADATA 結構。socket(AF_INET, SOCK_STREAM, 0) 建立串流式套接字,取得句柄 SOCKET。bind 將 Socket 綁定至特定 IP 與埠號(sockaddr_in 結構)。listen 設定佇列長度,accept 阻塞等待客戶端連線,成功則產生新 Socket 進行通訊。sockaddr_in(IP、埠號需與伺服器一致)。setsockopt 設定超時、緩衝區;用 ioctlsocket 設定非阻塞模式。connect 發起連線,伺服器端 accept 返回新 Socket 完成三方交握。連線建立後,雙方可使用 send/recv 或 Write/Read 進行資料傳輸。通訊結束時,雙方呼叫 closesocket 關閉 Socket,並以 WSACleanup 釋放 Winsock 資源。

圖 1:Winsock 套接字主要工作流程(①~⑩ 標示資料交換順序)
伺服器端接收截圖請求後,需將螢幕畫面擷取為可跨裝置傳輸的標準格式。
GetSystemMetrics(SM_CXSCREEN/CYSCREEN) 取得螢幕解析度,確定截取範圍。CreateDC("DISPLAY"))、相容記憶體 DC(CreateCompatibleDC)與相容位圖(CreateCompatibleBitmap)。SelectObject 選入位圖,再以 StretchBlt 將螢幕內容複製至記憶體 DC,獲得 GDI 位圖(HBITMAP)。GDI 位圖格式依賴顯示裝置,跨電腦傳輸無意義,必須轉為裝置無關位圖(DIB)。
DIB 內含色彩資訊(調色板),為標準 BMP 核心格式,包含:位圖資訊頭、調色板、影像資料三部分。
GetObject 取得 BITMAP 結構,填寫 BITMAPINFOHEADER,計算調色板大小,配置全域記憶體(GlobalAlloc)。biSizeImage 計算),重新調整記憶體大小(GlobalReAlloc)。GetDIBits 將資訊頭、調色板、像素資料寫入記憶體區,取得 DIB 控制代碼(HANDLE),即可構成標準 BMP 檔案。客戶端發送固定標識 "CopyScr",伺服器端回應相同標識,雙方確認連線有效。程式碼片段:
char cFlag[8] = "CopyScr\0";
send(sktClient, cFlag, 8, 0); // 發送客戶端標識
recv(sktClient, cFlag, 8, 0); // 接收伺服器端標識
客戶端以固定計時器間隔請求畫面。伺服器端流程:
SENDBLOCK)分批發送 DIB 資料,每塊發送後等待客戶端確認(recv StopFlag)。客戶端按相同分塊邏輯接收:先讀畫面資訊,再循環接收區塊資料,最後接收餘數。完整組裝後,呼叫 StretchDIBits 直接繪製到客戶端 DC 上,實現畫面即時顯示。
使用者在客戶端畫面區域點擊滑鼠,客戶端封裝按鍵類型(左/右)、點擊模式(單/雙擊)、座標(X/Y)等事件傳送給伺服器端。伺服器端解析後呼叫 mouse_event(如 MOUSEEVENTF_LEFTDOWN)模擬輸入,完成遠端操控閉環。
透過上述機制,客戶端可定時接收伺服器端畫面,伺服器端即時響應滑鼠事件,實現本地端對目標機的完整遠端控制。該技術已成功應用於電子測量儀器的遠端監控系統中,驗證了其穩定性與實用性。