【正文】
則是確保目標系統(tǒng)有效且效率高。 課題的結(jié)構(gòu)安排第1章論述了Socket網(wǎng)絡(luò)編程的的研究背景和意義, Socket網(wǎng)絡(luò)編程技術(shù)的國內(nèi)外研究現(xiàn)狀。 課題的國內(nèi)外研究現(xiàn)狀基于Socket的網(wǎng)絡(luò)編程技術(shù)在人們不斷的研究和探索下,日益的完善與成熟,已被廣泛的應(yīng)用在通信,醫(yī)療等各個領(lǐng)域。 關(guān)鍵字:Socket;VC++;網(wǎng)絡(luò)編程;遠程控制 AbstractWith the rapid development of network technology, puter has brought human civilization aundergone enormous changes, the original physical interface has been unable to meet the requirements of network munication. As the network munication protocol TCP / IP protocol solved the basic problem of this munication, the introduction of a technique called Socket application program interface. Socket network based on programming is a widely utilized nowadays .In this paper, VC development environment, socketbased network programming, implementation and process control system that allows the local puter through the LAN to access different remote puters, and its operation can also be carried out Internet host.This article first briefly introduces the remote desktop monitoring system key technologies, as well as system requirements analysis. The basic framework of the system design and function of each module。TCP/IP(Transmission Control Protocol/Internet Protocol)協(xié)議作為網(wǎng)絡(luò)通信的基本協(xié)議就解決了這一通信難題,它引入了一種稱之為“Socket”的應(yīng)用程序接口。本文首先針對遠程控制系統(tǒng)的關(guān)鍵技術(shù)進行了深入研究,并對遠程控制系統(tǒng)的做出了需求分析。如果兩臺計算機是利用一個“通道”進行通信,那么這個“通道”的兩端就是套接字??蛻? 服務(wù)器模式通常采用監(jiān)聽/ 連接的方式實現(xiàn),服務(wù)器端應(yīng)用程序在一個端口監(jiān)聽對服務(wù)的請求。詳細設(shè)計包括了界面設(shè)計,客戶端模塊設(shè)計與實現(xiàn),服務(wù)器模塊設(shè)計與實現(xiàn),消息模擬功能的實現(xiàn),流數(shù)據(jù)的實現(xiàn),圖形編碼等。第一層:物理層,負責最后將信息編碼成電流脈沖或其它信號以用于網(wǎng)上傳輸。第四層:傳輸層,向高層提供可靠的端到端的網(wǎng)絡(luò)數(shù)據(jù)流服務(wù)。應(yīng)用層的功能一般包括標識通信伙伴、定義資源的可用性和同步通信。實際上TCP/IP標準并不定義與ISO數(shù)據(jù)鏈路層和物理層相對應(yīng)的功能。因特網(wǎng)的應(yīng)用層協(xié)議包括Finger、Whois、FTP(文件傳輸協(xié)議)、Gopher、HTTP(超文本傳輸協(xié)議)、Telent(遠程終端協(xié)議)、SMTP(簡單郵件傳送協(xié)議)、IRC(因特網(wǎng)中繼會話)、NNTP(網(wǎng)絡(luò)新聞傳輸協(xié)議)等。這對數(shù)據(jù)的穩(wěn)定性、正確性和發(fā)送/接收順序要求嚴格的應(yīng)用十分適用,TCP協(xié)議使用該類接口。套接字編程基本概念進程通信的概念最初來源于單機系統(tǒng)。因此,網(wǎng)間進程通信還要解決多重協(xié)議的識別問題。在TCP/IP協(xié)議的實現(xiàn)中,端口的操作類似于一般的I/O操作,進程獲取一個端口,相當于獲取本地唯一的I/O文件,可以用一般的讀寫原語訪問。因此,每一個標準服務(wù)器都擁有一個全局公認的端口(即周知口,wellknown port),即使在不同的機器上,其端口號也相同。為保證數(shù)據(jù)的正確性,在網(wǎng)絡(luò)協(xié)議中須指定網(wǎng)絡(luò)字節(jié)順序。(7)順序在網(wǎng)絡(luò)傳輸中,兩個連續(xù)報文在端-端通信中可能經(jīng)過不同路徑,這樣到達目的地時的順序可能會與發(fā)送時不同。服務(wù)的表現(xiàn)形式是原語(primitive),如系統(tǒng)調(diào)用或庫函數(shù)。 無連接服務(wù)是郵政系統(tǒng)服務(wù)的抽象,每個分組都攜帶完整的目的地址,各分組在系統(tǒng)中獨立傳送。Winsock規(guī)范定義并記錄了任何使用API與Internet通訊協(xié)議(ISP通常指TCP/IP)連接。根據(jù)通信性質(zhì)不同可分為:Stream Sockets(流式套接字)和Datagram Sockets(數(shù)據(jù)報套接字),其中Stream Sockets提供無差錯的、面向連接的、無長度限制的雙向字節(jié)流傳輸,適應(yīng)于處理大量數(shù)據(jù),尤其適合于FTP服務(wù)。面向連接的協(xié)議在連接端點之間建立一條虛電路,面向連接的客戶程序不必關(guān)心網(wǎng)絡(luò)軟件使用怎樣的本地地址傳輸數(shù)據(jù)。無連接協(xié)議不建立與遠地服務(wù)器的直接連接。應(yīng)用程序在完成對請求的Socket庫的使用后,要調(diào)用WSACleanup函數(shù)來解除與Socket庫的綁定并且釋放Socket庫所占用的系統(tǒng)資源。假如該函數(shù)執(zhí)行成功,則返回0;如果執(zhí)行失敗,則返回SOCKET_ERROR。Windows系統(tǒng)內(nèi)部各圖像繪制操作都是以BMP為基礎(chǔ)的。位圖信息頭和顏色表組成位圖信息,B1TMAPINFO結(jié)構(gòu)定義如下:typcdefstruct tagBITMAPINFO{BITMAPINFoHEADER bmiIIeader; ∥位圖信息頭RGBQUAD bmiColors; ∥顏色表}BITMAPINFO;(4)位圖數(shù)據(jù)位圖數(shù)據(jù)記錄了位圖的每一個像素值,記錄順序是掃描行內(nèi)從左到右,掃描行之問從下到上。利用前一個事實的壓縮技術(shù)就是無損壓縮技術(shù),即壓縮后的圖像數(shù)據(jù)還原后與未壓縮時嚴格相同,沒有失真,如TIFF圖像文件格式;利用后一個事實的壓縮技術(shù)就是有損壓縮技術(shù),即壓縮后的圖像數(shù)據(jù)與未壓縮時有所不同,但不影晌人們對原始資料表達的信息造成誤解,如JPEG圖像文件格式。假如用n1和n2分別代表用來表達相同信息的2個數(shù)據(jù)集合中的信息載體單位的個數(shù),那么壓縮率CR為:Cr=nl/n2,一般情況下Cr在開區(qū)間(0,+∞)中取值。它使用預(yù)先二進制描述來替換每個符號,長度由特殊符號出現(xiàn)的頻率決定。該壓縮方法編碼也是以兩個字節(jié)為基本單位。這種方法還是非常有效的。該程序采用TCP協(xié)議,因為流控和差控的存在使得傳輸更具有穩(wěn)定性。 系統(tǒng)的基本框架,在支持TCP/IP協(xié)議的網(wǎng)絡(luò)中,本地計算機與遠程主機通過物理網(wǎng)絡(luò)相連。4 系統(tǒng)的詳細設(shè)計與實現(xiàn) 界面設(shè)計 客戶端界面界面是系統(tǒng)功能得以實現(xiàn)的基本平臺,這里充分利用VC++。 服務(wù)器主界面服務(wù)器選項界面,包括開啟服務(wù)器,終止服務(wù),退出選項。 WSAPROTOCOL_INFO Protocol。dwLen)。 if (sClient == INVALID_SOCKET) return 1。server,sizeof(server)) == SOCKET_ERROR) { memset(szString,39。根據(jù)這個思想,需要兩個獨立的程序,SERVER REMOTE CONTROL和CLIENT REMOTE CONTROL。 int nRet。 struct myStruct myStructure。Protocol)。 if (bind(Listen,(struct sockaddr *)amp。這樣的技術(shù)被稱為消息模擬。應(yīng)用程序可以調(diào)用GetMessageExtraInfo獲得這些額外信息。 圖形編碼該程序數(shù)據(jù)圖型編碼采用的是C庫中的哈夫曼壓縮編碼技術(shù),下面稍作解釋以下:哈夫曼編碼的原理是:一個符號發(fā)生頻率越高,其碼長越短,反之則越長。當利用哈夫曼編碼對一篇英文進行壓縮時,e極有可能用一個位(bit)來表示,而z則可能花去 25個位(不是26)。Windows程序的所有輸出都是圖形。Windows下的輸出是設(shè)備無關(guān)的。GDI提供兩種基本服務(wù):創(chuàng)建圖形輸出和存儲圖象。GDI的圖形輸出是面向窗口的,面向窗口包含兩層含義:(1)每個窗口作為一個獨立的繪圖接口來處理,有它自己的繪圖坐標。選擇另一臺主機安裝客戶端程序,作為客戶機。 服務(wù)器待接收文件點擊遠程控制,選擇網(wǎng)格空間數(shù)目選項。 開啟攝像頭打開桌面迅雷視頻播放器。本文設(shè)計并實現(xiàn)了分塊截取屏幕的算法,應(yīng)用這一算法可以減少需要傳送的數(shù)據(jù)量,大大的降低了網(wǎng)絡(luò)的負載,同時又能及時準確地真實再現(xiàn)被控端當前的屏幕信息。感謝我大學里的所有老師,是你們提高了我的素質(zhì)修養(yǎng),豐富了我的人生閱歷,教會了我書本上學不到的知識,沒有你們無私的付出,我永遠會在無知的迷茫中徘徊躊躇。本系統(tǒng)目前使用效果良好。 視頻播放 測試結(jié)果服務(wù)器開啟后,客戶端可實現(xiàn)連接,連接成功后,客戶端顯示服務(wù)器端的桌面情況,客戶端可隨時改變數(shù)據(jù)壓縮方式,并可選擇不壓縮,客戶端還可以選擇色彩模式,256色的明顯比16色模式要清晰,分辨率提高。 顯示網(wǎng)格將水平網(wǎng)格數(shù),垂直網(wǎng)格數(shù),分別改為原來的二倍。 系統(tǒng)功能和性能測試 客戶端顯示測試在主機A運行服務(wù)器程序。每個窗口必須獨立的維護自己的輸出。這些繪圖函數(shù)分為三類:一是文字輸出,二是矢量圖形函數(shù),用于畫線、圓等幾何圖形,三是光柵(位圖)圖形函數(shù),用于繪制位圖。這樣的程序編寫起來繁瑣,而且不容易移植(因為換一臺不同型號的打印機就要重新修改程序)。二者相比,e使用了一般編碼的1/8的長度,z則使用了 3倍多。 打個不恰當?shù)谋确?,現(xiàn)在用的最多的幾個漢字“個”“的”“們”“什”“么”什么的筆畫不是都很少嗎?這就是文字演變的規(guī)律,也就是哈夫曼編碼的原理。然后將當前改變區(qū)域的屏幕的內(nèi)容發(fā)送到客服端。相關(guān)的功能函數(shù)介紹如下:1 、Keybd_event函數(shù)VOID key_event(BYTE bvk,BYTE bScan,DWORD dwFlags,ULONG_PTR dwExtraInfo)bVk:定義了一個虛擬鍵碼,它的范圍是1~254bScan:保留dwFlags:定義函數(shù)操作類型,按下或彈起DwExtraInfo:定義了擊鍵的額外關(guān)聯(lián)值程序中想要模擬PRINTSCRN的消息,去抓取屏幕的內(nèi)容并將其保存到剪切板中,那么可以將參數(shù)BVK設(shè)置為VK_SNAPSHOT。 MessageBox(NULL,szString,Remote Server,MB_OK)。 if (Listen == SOCKET_ERROR) { sprintf(szString,socket() failed: %d,WSAGetLastError())。 nRet = WSAEnumProtocols(NULL,NULL,amp。 int iAddrSize。網(wǎng)絡(luò)模塊:負責監(jiān)聽客服端的連接,負責接收并處理客服端發(fā)過來的消息命令,在本機上處理這些消息并發(fā)送各種數(shù)據(jù),如屏幕數(shù)據(jù),命令反饋數(shù)據(jù)等,到客服端監(jiān)聽程序。,sizeof(szString))。 setsockopt(sClient,SOL_SOCKET,SO_RCVBUF,(char *)amp。 } pBuf = malloc(dwLen)。 char szMessage[81]。 開啟服務(wù)器選項 客戶端模塊設(shè)計與實現(xiàn)客戶端實現(xiàn)原理網(wǎng)絡(luò)模塊:負責連接到服務(wù)器的監(jiān)聽Socket;負責向服務(wù)器發(fā)送各種操作命令,如鼠標,鍵盤,各種參數(shù)消息等命令。 客戶端主界面客戶端菜單欄,遠程控制選項界面包括服務(wù)器連接,斷開服務(wù)器,數(shù)據(jù)壓縮,網(wǎng)格空間數(shù)目,色彩模式選擇,退出選項。兩端的程序通過套接字Socket建立連接。通過Socket傳遞的虛擬消息結(jié)構(gòu)體到對端,被對端主機解釋并虛擬,最終達到程序目的。這是當遠程訪問軟件出場的時候了,它能幫助你訪問遠程計算機就像訪問自己的計算機一樣,距離不再是問題。如編碼 0504表示從當前位置開始連續(xù)顯示5個顏色值為04的像素。哈夫曼算法在改變?nèi)魏畏柖M制編碼引起少量密集表現(xiàn)方面是最佳的,然而,它并不處理符號的順序和重復(fù)或序號的序列。如果能減少或消除其中的一種或多種冗余,就能取得數(shù)據(jù)壓縮的效果。采取有損壓縮的方法進行數(shù)據(jù)壓縮,在解壓時會造成較大的誤差擴。Windows規(guī)定下個掃描行所占的字節(jié)數(shù)必須是4的倍數(shù)(即以long為單位),不足的以0填充。Windows ,因此把這種BMP圖像文件格式稱為設(shè)備無關(guān)位圖(DIB)格式。該函數(shù)的第一個參數(shù)指定處于監(jiān)聽狀態(tài)的流套接字;操作系統(tǒng)利用第二個參數(shù)來返回新創(chuàng)建的套接字的地址結(jié)構(gòu);操作系統(tǒng)利用第三個參數(shù)來返回新創(chuàng)建的套接字的地址結(jié)構(gòu)的長度。由于每個進程中都有一個套接字描述符表,表中的每個套接字描述符都對應(yīng)了一個位于操作系統(tǒng)緩沖區(qū)中的套接字數(shù)據(jù)結(jié)構(gòu),因此有可能有幾個套接字描述符指向同一個套接字數(shù)據(jù)結(jié)構(gòu)。Winsock用bind函數(shù)給Socket指定一個本地IP地址和一個協(xié)議端口,其典型調(diào)用如下:result=bind(“Socket句柄”,“本地Socket地址”,“本地Socket地址長度”);服務(wù)器程序使用bind函數(shù)用Winsock登記一個協(xié)議端口,程序告訴Winsock監(jiān)視哪一個協(xié)議端口的數(shù)據(jù)傳送,Winsock接著告訴傳輸層將此協(xié)議端口收