【正文】
holdbitmap = (HBITMAP)SelectObject(hmemdc, hbitmap)。 第 24 頁 共 30 頁 yscrn = GetDeviceCaps(hscrdc, VERTRES)。// 位圖寬度和高度 int xscrn, yscrn。正如他們的名字所示, Screen2Bitmap 的作用是將屏幕截圖,并保存到一個(gè)位圖中,然后返回這個(gè)位圖的句柄;而 Bmp2Stream則是為了網(wǎng)絡(luò)傳輸作準(zhǔn)備,它接收一個(gè)位圖句柄,對這個(gè)位圖進(jìn)行編碼,并拷貝到一個(gè)緩沖區(qū)里。 } } else { m_strInfo = 重復(fù) 登錄 !。 ()。 //綁定屏幕鎖定下可以操作的窗口 ()。 //設(shè)置監(jiān)聽端口為 22221 ()。}。 ~CClient() { closesocket(local)。 local=INVALID_SOCKET。 CClient() { WSADATA wsaData。 bool UnlockScreen()。 int remote_addr_len。 int pos。 第 21 頁 共 30 頁 SOCKET srvsock。 WSACleanup()。 }。client)。 bool SnapScreen(char *ip, CxImageamp。 bool LockScreen(char* ip)。因此,之間涉及大量的網(wǎng)絡(luò)通信。選中其中的某個(gè),就可以進(jìn)行響應(yīng)的操作,比如“截取屏幕”,那么就可以獲取客戶端的屏幕畫面,并顯示到用戶界面中。當(dāng)用戶選擇終止程序時(shí)將退出。在本協(xié)議中,服務(wù)器將定時(shí)發(fā) 送 ALIVE 命令給每個(gè)客戶端,客戶端在收到后回復(fù) OK 給服務(wù)器端。接下來就將把進(jìn)程信息發(fā)送到服務(wù)器端。 圖 34 發(fā)送消息 4)屏幕截圖。服務(wù)器端向客戶端發(fā)送 LOCK 命令,客戶端將嘗試鎖定屏幕,如果成功,將向服務(wù)器返回 OK,否則返回 NO;服 務(wù)器端向客戶端發(fā)送 UNLOCK 命令,客戶端將嘗試解除鎖定屏幕,如果成功,將向服務(wù)器返回 OK,否則返回 NO。 1)用戶登錄。要求程序界面友好,安裝及維護(hù)簡易可行。管理員可以從服務(wù)器上直接發(fā)送一些消息到用戶電腦上,比如對用戶的違規(guī)行為進(jìn)行警告,對時(shí)間快要用盡的用戶進(jìn)行提醒等。該功能可以用于設(shè)定某些 程序無法執(zhí)行(比如一些被禁止的游戲等),同時(shí),也可以從一定程度上起到病毒防治作用。 2)能隨時(shí)鎖定和解鎖用戶電腦。 MFC 編制軟件時(shí)的大量內(nèi)節(jié) ,如應(yīng)用程序?qū)崿F(xiàn)消息的處理 ,設(shè)備環(huán)境繪圖 ,這種結(jié)合是以方便為目的的 ,必定要付出一定代價(jià) , 因此就造成了 MFC 對類封裝中的一定程度的的冗余和迂回 ,但這是可以 接收 的 。 win32 編程可以用 C 來完成 , 主要是通過 Windows 的 API 來工作 。 =i_addr()。 memset((void *)amp。 十 ) connect 函數(shù) int connect( SOCKET s, const struct sockaddr FAR *name, int namelen )。 第 13 頁 共 30 頁 addrlen=sizeof(ServerSocketAddr)。 服務(wù)程序調(diào)用 accept函數(shù)從處于監(jiān)聽狀態(tài)的流套接字 s的客戶連接請求隊(duì)列中取出排在最前的一個(gè)客戶請求,并且創(chuàng)建一個(gè)新的套接字來與客戶套接字創(chuàng)建連接通道,如果連接成功,就返回新創(chuàng)建的套接字的描述符,以后與 客 戶 套 接字 交 換數(shù) 據(jù) 的 是新 創(chuàng) 建的 套 接 字; 如 果 失敗 就 返 回INVALID_SOCKET。 服務(wù)程序可以調(diào)用 listen 函數(shù)使其流套接字 s處于監(jiān)聽狀態(tài)。 = htons(8888)。 其中 sin_family 置 AF_INET; sin_port 指明端口號; sin_addr 結(jié)構(gòu)體 第 12 頁 共 30 頁 中只有一個(gè)唯一的字段 s_addr,表示 IP 地址,該字段是一個(gè)整數(shù),一般用函數(shù) i_addr()把字符串形式的 IP 地址轉(zhuǎn)換成 unsigned long 型的整數(shù)值后再置給 s_addr。 u_short sin_port。 char sa_data[14]。 當(dāng)創(chuàng)建了一個(gè) Socket 以后,套接字?jǐn)?shù)據(jù)結(jié)構(gòu)中有一個(gè)默認(rèn)的 IP 地址和默認(rèn)的端口號。 recv 函數(shù)僅僅是 copy 數(shù)據(jù),真正的接收數(shù)據(jù)是協(xié)議來完成的), recv 函數(shù)返回其實(shí)際 copy的字節(jié)數(shù)。該函數(shù)的第一個(gè)參數(shù)指定接收端套接字描述符;第二個(gè)參數(shù)指明一個(gè)緩沖區(qū),該緩沖區(qū)用來存放 recv 函數(shù)接收到的數(shù)據(jù);第三個(gè)參數(shù)指明 buf 的長度;第四個(gè)參數(shù)一般置 0。如果協(xié)議在后續(xù)的傳送過程中出現(xiàn)網(wǎng)絡(luò)錯(cuò)誤的話,那么下一個(gè) Socket函數(shù)就會返回 SOCKET_ERROR。這里只描述同步Socket 的 send 函數(shù)的執(zhí)行流程。 五 ) send 函數(shù) int send( SOCKET s, const char FAR *buf, int len, int flags )。由于每個(gè)進(jìn)程中都有一個(gè) 套接字描述符表,表中的每個(gè)套接字描述符都對應(yīng)了一個(gè)位于操作系統(tǒng)緩沖區(qū)中的套接字?jǐn)?shù)據(jù)結(jié)構(gòu),因此有可能有幾個(gè)套接字描述符指向同一個(gè)套接字?jǐn)?shù)據(jù)結(jié)構(gòu)。 ppe=getprotobyname(tcp)。每個(gè)進(jìn)程的進(jìn)程空間里都有一個(gè)套接字描述符表,該表中存放著套接字描述符和套接字?jǐn)?shù)據(jù)結(jié)構(gòu)的對應(yīng)關(guān)系。第一個(gè)參數(shù)指定應(yīng)用程序使用的通信協(xié)議的協(xié)議族,對于 TCP/IP 協(xié)議族,該參數(shù)置 PF_INET。 二 ) WSACleanup 函數(shù) int WSACleanup (void)。該函數(shù)執(zhí)行成功后返回 0。 使用 Socket 的程序在使用 Socket 之前必須調(diào)用 WSAStartup 函數(shù)。應(yīng)用程序調(diào)用 Windows socket 的 API 實(shí)現(xiàn)相互之間的通信。數(shù)據(jù)報(bào)套接字使用用戶數(shù)據(jù)報(bào)協(xié)議( UDP)。它提供了一種可靠的,面向連接的數(shù)據(jù)傳輸方式。在服務(wù)器進(jìn)程處于運(yùn)行狀態(tài)的情況下,客戶進(jìn)程就能夠初始化一個(gè)到服務(wù)器的 TCP 連接了,這是通過在客戶程序中創(chuàng)建一個(gè)套接字對象來完成的,當(dāng)客戶創(chuàng)建了它的套接字對象的時(shí)候,它詳細(xì)說明了服務(wù)器進(jìn)程的地址,也就是,服務(wù)器的 IP 地址和進(jìn)程的端口號,一旦創(chuàng)建了套接字對象,客戶 端的 TCP 就發(fā)起一個(gè)三次握手,并建立一個(gè)和服務(wù)器的TCP 連接,三次握手對客戶和服務(wù)器程序來說是完全透明的。對于應(yīng)用程序來說,它就像一個(gè)服務(wù)協(xié)議插座一樣,各種不同的協(xié)議,對應(yīng)不同的端口 。套接字也用于指代應(yīng)用程序和網(wǎng)絡(luò)之間的應(yīng)用程序接口( application program interface,簡稱 API),因?yàn)樗质怯糜跇?gòu)造互聯(lián)網(wǎng)中的網(wǎng)絡(luò)應(yīng)用程序的編程接口。這兩個(gè)進(jìn)程通過經(jīng)由各自的套接字( Socket)發(fā)送和 接收 消息彼此通信。在應(yīng)用開發(fā)中,就像使用文件句柄一樣,可以對Socket 句柄進(jìn)行讀、寫操作。兩者之間的接口是網(wǎng)絡(luò)編程界面(程序員界面)。如今 Socket接口是 TCP/IP網(wǎng)絡(luò)最為通用的 API,也是在 Inter上進(jìn)行應(yīng)用開發(fā)最為通用的 API。凡是要連接到 Inter 的計(jì)算機(jī),都必須同時(shí)安裝和使用這兩個(gè)協(xié)議,因此在實(shí)際中常把這兩個(gè)協(xié)議統(tǒng)稱作 TCP/IP 協(xié)議。 TCP 協(xié)議具有自動調(diào)整超時(shí)值 的功能,能很好地適應(yīng) Inter 上各種各樣的變化,確保傳輸數(shù)值的正確。這是因?yàn)樗鼮閮膳_計(jì)算機(jī)之間的連接起了重要作用:當(dāng)一臺計(jì)算機(jī)需要與另一臺遠(yuǎn)程計(jì)算機(jī)連接時(shí), TCP協(xié)議會讓它們建立一個(gè)連接、 第 6 頁 共 30 頁 發(fā)送和接收數(shù)據(jù)以及終止連接。由于 IP 協(xié)議是不可靠的數(shù)據(jù)傳輸協(xié)議,由于網(wǎng)絡(luò)的擁塞而發(fā)生的數(shù)據(jù)丟失等情況是不可避免的,因此 Inter 還必須有一定的控制重傳機(jī)制,這就是差錯(cuò)與控制報(bào)文協(xié)議(ICMP)。 IP 協(xié)議的主要功能包括無連結(jié)數(shù)據(jù)報(bào)傳送﹑數(shù)據(jù)報(bào)尋徑以及差錯(cuò)處理三部分。應(yīng)用層包括許多協(xié)議,例如支持 Web 的 HTTP、支持文件傳送的 FTP、支持 電子郵件的 SMTP 協(xié)議 都建立在這一 層。 TCP 還把長數(shù)據(jù)塊分割成較小的段,并提供擁塞控制機(jī)制。 4) 傳輸層: 傳輸層給應(yīng)用提供在其客戶端和服務(wù)器之間傳輸應(yīng)用層消息的服務(wù)。 3) 網(wǎng)絡(luò) 層: 網(wǎng)絡(luò) 層 提供越過多個(gè)網(wǎng)絡(luò)的選路功能,為端點(diǎn)提供無連接的數(shù)據(jù)報(bào)訪問,并定義端到端通過整個(gè)互聯(lián)網(wǎng)網(wǎng)絡(luò)的尋址功能。分組從源端到目的端一般需要經(jīng)過多個(gè)鏈 路,每個(gè)分組沿其路徑到達(dá)不同鏈路是,可能有不同的鏈路層協(xié)議來處理。 它定義了將數(shù)據(jù)組成正確幀的規(guī)程和在網(wǎng)絡(luò)中傳輸幀的規(guī)程,幀是指一串?dāng)?shù)據(jù),它是數(shù)據(jù)在網(wǎng)絡(luò)中傳輸?shù)膯挝弧? 物理層提供了一個(gè)基本機(jī)制:對二進(jìn)制數(shù)據(jù)(比特)進(jìn)行編碼(發(fā)送到物理介質(zhì))和解碼(從物理介質(zhì)接收),例如 10Mbit/s( bit/s 指比特每秒)以太網(wǎng)的曼徹斯特編碼、光纖分布式數(shù)據(jù)接口( Fiber Distributed data Interface,簡稱 FDDI)的 4B/5B 編碼;物理層也負(fù)責(zé)通知第二層(鏈路層)何時(shí)訪問介質(zhì)。其中網(wǎng)絡(luò)訪問層又分為網(wǎng)絡(luò)接口層 (鏈路層 )和最基礎(chǔ)的物理層。甚至即使是只有一個(gè)字節(jié)發(fā)生錯(cuò)誤或者沒有收到,也必須將整個(gè)數(shù)據(jù)報(bào)都丟棄。 IP協(xié)議的基本數(shù)據(jù)形態(tài)是數(shù)據(jù)元( datagram),一般都成為數(shù)據(jù)報(bào),此協(xié)議提供了從來源主機(jī)到目的主機(jī)之間數(shù)據(jù)報(bào)的傳輸機(jī)制。這樣會大大加快 Inter的傳輸總速度。事實(shí)上,在單一數(shù)據(jù)傳輸中,多個(gè)數(shù)據(jù)包完全可能沿不同的路由傳輸。就如同一條高速公路上,各類汽車(即使它們開向不同的地方)都在公共道路上行駛。TCP 的工作就是管理這種流動并確保其數(shù)據(jù)是正確的。接著數(shù)據(jù)包被傳過網(wǎng)絡(luò),即把它們傳送給遠(yuǎn)程的主機(jī)這就是 IP 的工作。每條 TCP 的傳輸連接用發(fā)送端套接字、接收端套接字來表示,是點(diǎn)到點(diǎn)的全雙工通道(全雙工 —— 支持同時(shí)的雙向傳輸)運(yùn) 行與 TCP 上的應(yīng)用程序包括FTP、 HTTP、 SMTP 和 TELNET。電子郵件、遠(yuǎn)程終端訪問、 Web 和文件傳送都使用 TCP。所以 TCP/IP分別是 Inter 在傳輸層和網(wǎng)絡(luò)層執(zhí)行的協(xié)議。 Inter依靠上千個(gè)網(wǎng)絡(luò)和百萬計(jì)的計(jì)算機(jī),而 TCP/IP是把它們合在一起的粘結(jié)劑 。所謂 Inter 協(xié)議是指在 第 2 頁 共 30 頁 Inter 的網(wǎng)絡(luò)之間以及各成員網(wǎng)內(nèi)部交換信息時(shí)要求遵循的協(xié)議。 2 相關(guān)技術(shù)原理介紹 TCP/IP協(xié)議 TCP/IP 協(xié)議簡介 所謂協(xié)議是一套用技術(shù)術(shù)語描述某些事物應(yīng)該如何做的規(guī)則。因此,如何設(shè)計(jì)和實(shí)現(xiàn)機(jī)房監(jiān)控系統(tǒng)成為了本次課題的研究問題。對于同學(xué)們來說,這本來是個(gè)很好的機(jī)會,但有個(gè)別同學(xué)未能珍惜這個(gè)機(jī)會,他們沒有好好利用這些微機(jī)進(jìn)行學(xué)習(xí)和研究,而是在機(jī)房內(nèi)打游戲或者閑聊等,甚至有人利用電腦進(jìn)行違反法規(guī)的活動。隨著計(jì)算機(jī)網(wǎng)絡(luò)的出現(xiàn),更使得人們的信息處理方式發(fā)生了革命性的改變。 lock screen。 關(guān)鍵詞 : 機(jī)房監(jiān)控系統(tǒng);屏幕截圖;鎖定屏幕; Socket The Design and Implementation of the Computer Room Monitor and Control System Abstract It is necessary to provide a puter room monitor and control system with good quality so that the users will obey the room rules and the room can work effectively in a steady environment. After analyzing the process of the puter room management and studying some CyberCafe management system, the concept framework of the puter room monitor and control system was gained. At least, the monitor system must provide abilities to snap the screen of the puter specified by the manager, to disabled the input function of the keyboard and the mouse and to send messages to the puter users. This article enumerated the technologies needed for the implementation of the monitor system and introduced in detail about the issue that how to build a Win32 executable system by using the VC++ as the development tools. In this article, the 2nd chapter introduced the TCP/IP protocol and the Socket programming。機(jī)房