畢業(yè)設(shè)計(jì) 畢業(yè)論文 計(jì)算機(jī)科學(xué)與技術(shù) 計(jì)算機(jī)遠(yuǎn)程控制軟件的設(shè)計(jì)與開發(fā)
《畢業(yè)設(shè)計(jì) 畢業(yè)論文 計(jì)算機(jī)科學(xué)與技術(shù) 計(jì)算機(jī)遠(yuǎn)程控制軟件的設(shè)計(jì)與開發(fā)》由會(huì)員分享,可在線閱讀,更多相關(guān)《畢業(yè)設(shè)計(jì) 畢業(yè)論文 計(jì)算機(jī)科學(xué)與技術(shù) 計(jì)算機(jī)遠(yuǎn)程控制軟件的設(shè)計(jì)與開發(fā)(53頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 xx學(xué)院本科生畢業(yè)論文 計(jì)算機(jī)遠(yuǎn)程控制軟件的設(shè)計(jì)與開發(fā) Computer Remote Control Software Design and Development 院 系 計(jì)算機(jī)科學(xué)與工程學(xué)院 專 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) 學(xué) 生 班 級(jí) xx級(jí)xx班 姓 名 xx 學(xué) 號(hào) xx 指導(dǎo)教師單位 計(jì)算機(jī)科學(xué)與工程學(xué)院 指導(dǎo)教師姓名 xxx 指導(dǎo)教師職稱 講師 計(jì)算機(jī)遠(yuǎn)程控制軟件的設(shè)計(jì)與開發(fā) 計(jì)算機(jī)科學(xué)與技術(shù)2009級(jí)00班 xxx
2、摘要 隨著網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,遠(yuǎn)程控制協(xié)助軟件越來(lái)越受到人們的重視。計(jì)算機(jī)遠(yuǎn)程控制技術(shù)是計(jì)算機(jī)系統(tǒng)管理人員在異地通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)連接目標(biāo)計(jì)算機(jī),由本地計(jì)算機(jī)對(duì)遠(yuǎn)程計(jì)算機(jī)進(jìn)行管理和維護(hù)的行為?;贘AVA 與Socket編程技術(shù)結(jié)合的C/S遠(yuǎn)程監(jiān)控系統(tǒng)軟件突破了空間的限制,使用者不用親自到目標(biāo)地點(diǎn),直接通過(guò)網(wǎng)絡(luò)就能實(shí)現(xiàn)對(duì)被控機(jī)器的監(jiān)控,并且有著友好的操作界面。 本系統(tǒng)采用Java網(wǎng)絡(luò)編程和Java圖形編程實(shí)現(xiàn)。本系統(tǒng)在開發(fā)過(guò)程中,將計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)與遠(yuǎn)程控制理論基礎(chǔ)相結(jié)合。本遠(yuǎn)程控制軟件包括遠(yuǎn)程資源管理器、遠(yuǎn)程監(jiān)控、遠(yuǎn)程CMD控制臺(tái)三大模塊,實(shí)現(xiàn)了對(duì)被控機(jī)磁盤文件的上傳、下載、刪除,實(shí)現(xiàn)對(duì)鼠標(biāo)、
3、鍵盤的模擬以及屏幕截取,實(shí)現(xiàn)了遠(yuǎn)程執(zhí)行DOS命令,實(shí)現(xiàn)了遠(yuǎn)程關(guān)機(jī)。本系統(tǒng)從設(shè)計(jì)最初到具體實(shí)現(xiàn)、優(yōu)化、測(cè)試都嚴(yán)格遵循軟件工程的思想。 關(guān)鍵詞:Java;Socket;C/S;遠(yuǎn)程控制;屏幕截取;DOS命令。 Computer Remote Control Software Design and Development Computer Science and Technology xxx-xx xxxx Supervisor xxx Abstract With the rapid
4、development of network technology, the remote control to assist software by more and more peoples attention. Computer remote control technology is a computer system management personnel in different through the computer network connection target computer, the local computer to the remote computer ma
5、nagement and maintenance of behavior. Based on JAVA and Socket programming technology in combination with C/S remote monitoring system software broke through the limitation of space, users need not personally to the target location, directly through the network can achieve for the controlled machine
6、 monitoring, and have a friendly operation interface. This system uses Java network programming and Java graphical programming realization. This system in the development process, the computer network technology and remote control theory foundation combined. The remote control software includin
7、g remote resource manager, remote monitoring, remote CMD console three modules, realize the accused of machine disk file upload, download, delete, realize the simulation of the mouse, keyboard and screen capture, realized the remote implement DOS command, realized the remote shutdown. This system fr
8、om design to implementation first, optimization and testing are strictly follow the concept of software engineering. Keywords: Java;Socket; C/S; Remote control; Screen capture; DOS command. 目錄 1 引言 1 1.1 遠(yuǎn)程控制軟件的研究現(xiàn)狀和前景 2 1.2 課題研究的目的和意義 3 1.3 課題研究的主要內(nèi)容 3 2 系統(tǒng)分析 3 2.1 系統(tǒng)功能分析
9、3 2.2 系統(tǒng)軟件模型 4 2.3 系統(tǒng)的開發(fā)平臺(tái) 4 2.3.1 Eclipse介紹 4 2.3.2 Java語(yǔ)言 4 3 主要技術(shù)支持 5 3.1 Socket 5 3.2 Socket分類 7 3.3 基本套接字函數(shù)調(diào)用 8 3.3.1創(chuàng)建套接字 9 3.3.2建立套接字連接 9 3.3.3數(shù)據(jù)傳輸 9 3.3.4關(guān)閉套接字 11 3.4 C/S結(jié)構(gòu)特點(diǎn)及發(fā)展 11 3.5 TCP/IP體系結(jié)構(gòu) 12 3.5.1網(wǎng)絡(luò)層 12 3.5.2互聯(lián)層 12 3.5.3 傳輸層 13 3.5.4應(yīng)用層 13 3.6 多線程 13 3.7 Java遠(yuǎn)程控制
10、的基本原理 14 4 C/S模式遠(yuǎn)程控制系統(tǒng)的設(shè)計(jì)實(shí)現(xiàn) 16 4.1 主要實(shí)現(xiàn)功能 16 4.2 Client(監(jiān)控端)設(shè)計(jì) 16 4.2.1文件操作client.files 17 4.2.2遠(yuǎn)程控制臺(tái)client.cmd 21 4.2.3遠(yuǎn)程監(jiān)控client.view 23 4.2.4關(guān)機(jī) 26 4.2.5退出 26 4.2.6幫助 26 4.3 Server(被控端)設(shè)計(jì) 27 4.3.1文件操作(server.files) 27 4.3.2 CMD控制臺(tái)(server.cmd) 32 4.3.3遠(yuǎn)程監(jiān)控實(shí)現(xiàn)(server.view) 33 4.4軟件測(cè)試與分
11、析 33 4.4.1軟件測(cè)試的重要性 33 4.4.2測(cè)試實(shí)例的研究與選擇 34 4.4.3測(cè)試環(huán)境與測(cè)試條件 35 4.4.4系統(tǒng)部分模塊測(cè)試情況 35 5 總結(jié)與展望 36 致謝 37 參考文獻(xiàn) 38 xxx學(xué)院本科生畢業(yè)論文(設(shè)計(jì)) 1 引言 現(xiàn)如今,隨著網(wǎng)絡(luò)的快速發(fā)展,越來(lái)越多的企業(yè)都建立了自己的內(nèi)部網(wǎng)絡(luò)。面對(duì)眾多的部門聯(lián)網(wǎng)計(jì)算機(jī),對(duì)于人數(shù)相對(duì)偏少的網(wǎng)絡(luò)管理員來(lái)說(shuō),如果每臺(tái)計(jì)算機(jī)都需要親臨維護(hù)既浪費(fèi)時(shí)間,工作效率也極低,因此他們希望對(duì)整個(gè)網(wǎng)絡(luò)上的計(jì)算機(jī)能實(shí)現(xiàn)遠(yuǎn)程控制操作;也希望能實(shí)現(xiàn)遠(yuǎn)程傳輸文件操作;同時(shí)還能查看實(shí)時(shí)的計(jì)算機(jī)運(yùn)行狀態(tài)和進(jìn)行一些
12、相關(guān)操作;希望能夠傳輸文件;希望能夠防止病毒的蔓延、非法程序的拷貝、杜絕某些用戶的越權(quán)或非法操作等。因此,對(duì)于一個(gè)網(wǎng)絡(luò)管理員來(lái)說(shuō),一個(gè)合適的遠(yuǎn)程協(xié)控制軟件是至關(guān)重要的。 我們熟知的遠(yuǎn)程控制技術(shù),最早始于DOS時(shí)代,當(dāng)時(shí)并沒(méi)有現(xiàn)在的條件與技術(shù),而且也網(wǎng)絡(luò)不發(fā)達(dá),市場(chǎng)沒(méi)有更高的要求,所以遠(yuǎn)程控制技術(shù)沒(méi)有引起許多人的注意。但如今,隨著網(wǎng)絡(luò)的飛速發(fā)展,隨著人們對(duì)電腦的管理及技術(shù)支持的需要的不斷提高,遠(yuǎn)程操作及控制技術(shù)越來(lái)越引起人們的關(guān)注。遠(yuǎn)程控制一般支持下以下網(wǎng)絡(luò)類型:LAN、WAN、撥號(hào)方式、互聯(lián)網(wǎng)方式。除此之外,實(shí)現(xiàn)遠(yuǎn)程控制的方式還有通過(guò)串口、并口、紅外端口等通信方式。對(duì)于傳統(tǒng)的遠(yuǎn)程控制軟件,一
13、般使用NETBEUI、NETBIOS、IPX/SPX、TCP/IP等協(xié)議來(lái)實(shí)現(xiàn)遠(yuǎn)程控制。隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,越來(lái)越多的遠(yuǎn)程控制軟件提供通過(guò)C/S模式以Java語(yǔ)言來(lái)開遠(yuǎn)程控制軟件。 對(duì)于現(xiàn)如今流行的遠(yuǎn)程控制軟件,一般分兩個(gè)部分:客戶端Client,和服務(wù)器端Server。實(shí)用方法是,先將客戶端安裝到主控計(jì)算機(jī)上,將服務(wù)端程序安裝在被控制電腦上,然后在主控端電腦上執(zhí)行Client端程序,并且向被控端電腦中的Server端程序發(fā)出信號(hào),建立基于TCP協(xié)議的遠(yuǎn)程服務(wù)連接,然后通過(guò)這個(gè)遠(yuǎn)程服務(wù),使用各種遠(yuǎn)程控制功能發(fā)送遠(yuǎn)程控制命令,Server端響應(yīng)接收到的命令并執(zhí)行相應(yīng)的操作,我們稱這種遠(yuǎn)程控制方
14、式為基于遠(yuǎn)程服務(wù)連接的遠(yuǎn)程控制。通過(guò)遠(yuǎn)程控制軟件,我們可以進(jìn)行很多方面的遠(yuǎn)程控制,包括截取目標(biāo)電腦屏幕圖像、窗口以及進(jìn)程目錄;記錄并提取遠(yuǎn)端鍵盤事件;可以打開、關(guān)閉目標(biāo)電腦的任意目錄并實(shí)現(xiàn)資源共享;管理遠(yuǎn)端電腦的文件和文件夾;關(guān)閉或者重新啟動(dòng)遠(yuǎn)端電腦中的操作系統(tǒng)等。 上面主要表述的一般是一對(duì)一的基于遠(yuǎn)程服務(wù)的遠(yuǎn)程控制實(shí)現(xiàn)原理,其實(shí),如今最實(shí)用的遠(yuǎn)程控制軟件最理想的模式應(yīng)該是一對(duì)多,即一臺(tái)控制機(jī)可以控制多臺(tái)電腦。這對(duì)于如今的意義就好像一個(gè)大型的企業(yè),如果控制端能夠直接控制全部電腦,即顯示全部電腦目錄,再進(jìn)行一些列的操作,如遠(yuǎn)程桌面協(xié)助,遠(yuǎn)程資源管理器,都將帶來(lái)極大的方便。 一般的遠(yuǎn)程控制程
15、序的優(yōu)點(diǎn)在于,方便技術(shù)人員進(jìn)行遠(yuǎn)程維護(hù)或協(xié)助,技術(shù)人員再也不用親臨到實(shí)地操作,只需通過(guò)互聯(lián)網(wǎng),就可以方便的進(jìn)行諸如應(yīng)用程序的上傳,部署,或是對(duì)遠(yuǎn)程故障機(jī)的協(xié)助操作等等,極大的節(jié)省了人力物力,大大的提高了工作效率。 當(dāng)然,凡是有利必有弊,隨著互聯(lián)網(wǎng)的普及,遠(yuǎn)程控制技術(shù)也是如今黑客惡意攻擊的主要手段,諸如一些木馬控制程序等,不僅侵犯了他人的隱私,也嚴(yán)重的違反了國(guó)家法律。但是遠(yuǎn)程控制技術(shù)對(duì)于人類日常生活也是很重要的,如何利用好這門技術(shù)造福人類,這也是我研究這門課題的意義。 本軟件就是基于此而設(shè)計(jì)開發(fā)的,能實(shí)現(xiàn)以下的基本的遠(yuǎn)程功能: (1) 查看被控制端的文件目錄清單,即遠(yuǎn)程資源管理器; (
16、2) 拷貝被控制端的文件到控制端,同時(shí)也能上傳文件到被控端,或刪除被控端文件; (3) 強(qiáng)迫被控制端重新啟動(dòng)或關(guān)機(jī); (4) 直接執(zhí)行任何可執(zhí)行命令,打開應(yīng)用程序; (5) 控制被控制端的屏幕,在本地直接操作被控制端計(jì)算機(jī); 而且做了一些必要的安全性考慮。 1.1 遠(yuǎn)程控制軟件的研究現(xiàn)狀和前景 在飛速發(fā)展的今天,包括涵蓋遠(yuǎn)程辦公、遠(yuǎn)程教育、遠(yuǎn)程維護(hù)、遠(yuǎn)程協(xié)助以及企業(yè)管理等都屬于遠(yuǎn)程控制涉及的應(yīng)用領(lǐng)域。隨著應(yīng)用領(lǐng)域的越來(lái)越廣泛,使用的價(jià)值也不斷提高,市場(chǎng)需求也越來(lái)越明顯。目前比較出名的遠(yuǎn)程控制軟件例如PeerYou,VCN,Oray等都具有高效的信息交互和傳輸能力,以及實(shí)現(xiàn)跨平臺(tái)的
17、高效遠(yuǎn)程控制。C/S模式遠(yuǎn)程控制軟件充分利用網(wǎng)絡(luò)資源,以普通PC機(jī)為控制設(shè)備,通過(guò)面向?qū)ο笠约澳K化的程序設(shè)計(jì),有著低成本、高實(shí)用性、可靠性和可擴(kuò)展性的優(yōu)點(diǎn)。綜合以上原因,我決定通過(guò)一定的理論知識(shí)與實(shí)踐來(lái)嘗試學(xué)習(xí)此類知識(shí),并且使用Java編程語(yǔ)言結(jié)合C/S模式實(shí)現(xiàn)一款遠(yuǎn)程控制軟件。 1.2 課題研究的目的和意義 通過(guò)學(xué)習(xí)遠(yuǎn)程控制軟件的相關(guān)技術(shù)知識(shí)來(lái)更深刻的理解TCP/IP協(xié)議以及Socket編程原理;通過(guò)實(shí)現(xiàn)代碼的編寫來(lái)達(dá)到對(duì)Java語(yǔ)言編程能力的鍛煉以及增加對(duì)程序代碼優(yōu)化的經(jīng)驗(yàn)。 1.3 課題研究的主要內(nèi)容 基于Windows的遠(yuǎn)程控制軟件開發(fā)畢業(yè)設(shè)計(jì)的主要任務(wù)是要求做出從系統(tǒng)角
18、度出發(fā)的基于C/S開發(fā)模式與遠(yuǎn)程控制技術(shù)的實(shí)用軟件。 使用Socket網(wǎng)絡(luò)編程技術(shù)及Java程序開發(fā)語(yǔ)言。實(shí)現(xiàn)基本的遠(yuǎn)程控制要求,界面簡(jiǎn)潔友好。采用面向?qū)ο箝_發(fā)技術(shù),嚴(yán)格遵循軟件工程設(shè)計(jì)思想。 要求: (1) 基于C/S模式架構(gòu); (2) 實(shí)現(xiàn)截屏、執(zhí)行遠(yuǎn)程CMD命令,遠(yuǎn)程關(guān)機(jī)等功能; (3) 軟件安全、穩(wěn)定、可靠; (4) 至少能在兩臺(tái)計(jì)算機(jī)之間進(jìn)行控制演示; (5) 界面簡(jiǎn)潔友好。 2 系統(tǒng)分析 2.1 系統(tǒng)功能分析 本遠(yuǎn)程控制軟件由Server(服務(wù)器)和Client(客戶端)兩部分組成,并且需要使用者在服務(wù)端與客戶端同時(shí)運(yùn)行相應(yīng)程序來(lái)實(shí)現(xiàn),具體步奏如下: 第
19、一步,服務(wù)器端運(yùn)行相應(yīng)程序,使服務(wù)器端口處于監(jiān)聽狀態(tài),這里本遠(yuǎn)程控制軟件使用了三個(gè)端口(30018,30011,30012);啟動(dòng)服務(wù)器后,被控端計(jì)算機(jī)則處于等待連接狀態(tài)。 第二步,運(yùn)行客戶端程序,輸入被控端IP,服務(wù)端準(zhǔn)備響應(yīng),然后程序自動(dòng)連接到指定IP的遠(yuǎn)程計(jì)算機(jī)。到目前為止,整個(gè)連接步奏則完成,這個(gè)程序之間已經(jīng)建立了基于TCP協(xié)議的遠(yuǎn)程服務(wù)連接,進(jìn)入使用界面后便可進(jìn)行相應(yīng)操作。 2.2 系統(tǒng)軟件模型 本系統(tǒng)采用C/S程序開發(fā)模式設(shè)計(jì),由Server端(服務(wù)端)與Client端(客戶端)兩部分組成,下面是結(jié)構(gòu)圖: 圖 2.1 程序結(jié)構(gòu)圖 Fig.2.1 The chart
20、 of program structure 對(duì)客戶端的設(shè)計(jì),一直遵循面向?qū)ο蟮脑O(shè)計(jì)思想,堅(jiān)持界面友好,易操作;對(duì)于服務(wù)端的設(shè)計(jì)則偏于簡(jiǎn)潔實(shí)用,啟動(dòng)后顯示界面位于屏幕的右下角,只進(jìn)行操作的反饋,詳盡的設(shè)計(jì)過(guò)程將在接下來(lái)介紹。 2.3 系統(tǒng)的開發(fā)平臺(tái) 2.3.1 Eclipse介紹 本軟件實(shí)用的主要開發(fā)工具之一Eclipse 是一個(gè)開放源代碼的、基于Java的可擴(kuò)展開發(fā)平臺(tái)。它本身就是使用Java語(yǔ)言開發(fā)的,其本身就包含了括Java開發(fā)工具(Java Development Kit,JDK),使用Eclipse進(jìn)行Java程序開發(fā)不僅方便管理,而且也能大大提高開發(fā)效率。 2.3.2
21、 Java語(yǔ)言 早期的Java是使用在家用電器等小型系統(tǒng)的編程語(yǔ)言,被稱為Oak。用來(lái)解決家用電器的控制和通訊問(wèn)題,如電視機(jī)、電話、鬧鐘、烤面包機(jī)等。由于這些智能化家電的市場(chǎng)需求沒(méi)有預(yù)期的高,Sun放棄了該項(xiàng)計(jì)劃。就在Oak將要失敗的時(shí)候,隨著互聯(lián)網(wǎng)的發(fā)展,Sun看到了Oak在計(jì)算機(jī)網(wǎng)絡(luò)上的廣闊應(yīng)用前景,于是現(xiàn)在廣為流傳使用的Java誕生了。 Java 編程語(yǔ)言的風(fēng)格非常接近C、C++。Java是一個(gè)完全面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,它繼承了 C++ 語(yǔ)言面向?qū)ο蠹夹g(shù)的同時(shí)舍棄了C++語(yǔ)言中容易引起錯(cuò)誤的指針(以引用取代)、運(yùn)算符重載(operator overloading)、多重繼承(
22、以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的對(duì)象所占據(jù)的內(nèi)存空間,使得程序員不用再為內(nèi)存管理而擔(dān)憂。在 Java SE 1.5 版本中,Java 又引入了泛型編程(Generic Programming)、類型安全的枚舉、不定長(zhǎng)參數(shù)和自動(dòng)裝/拆箱等語(yǔ)言特性。 Java 不同于一般的編譯執(zhí)行計(jì)算機(jī)語(yǔ)言和解釋執(zhí)行計(jì)算機(jī)語(yǔ)言。它首先將源代碼編譯成二進(jìn)制字節(jié)碼(byte code),然后依賴各種不同平臺(tái)上的虛擬機(jī)來(lái)解釋執(zhí)行字節(jié)碼,從而實(shí)現(xiàn)了“一次編譯、到處執(zhí)行”的跨平臺(tái)特性。不過(guò),每次的編譯執(zhí)行需要消耗一定的時(shí)間,這同時(shí)也在一定程度上降低了 Java 程序的運(yùn)行效率。但在 J2
23、SE 1.4.2 發(fā)布后,Java 的執(zhí)行速度有了大幅提升。 與傳統(tǒng)程序不同,Sun 公司在推出 Java 之際就將其作為一種開放的技術(shù)。全球數(shù)以萬(wàn)計(jì)的 Java 開發(fā)公司被要求所設(shè)計(jì)的 Java 軟件必須相互兼容?!癑ava 語(yǔ)言靠群體的力量而非公司的力量”是 Sun 公司的口號(hào)之一,并獲得了廣大軟件開發(fā)商的認(rèn)同。這與微軟公司所倡導(dǎo)的注重精英和封閉式的模式完全不同。 Sun 公司對(duì) Java 編程語(yǔ)言的解釋是:Java 編程語(yǔ)言是個(gè)簡(jiǎn)單、面向?qū)ο蟆⒎植际?、解釋性、健壯、安全與系統(tǒng)無(wú)關(guān)、可移植、高性能、多線程和動(dòng)態(tài)的語(yǔ)言。 Java 平臺(tái)是基于 Java 語(yǔ)言的平臺(tái)。這
24、樣的平臺(tái)目前非常流行,因此微軟公司推出了與之競(jìng)爭(zhēng)的.NET平臺(tái)以及模仿 Java 的 C#語(yǔ)言。 3 主要技術(shù)支持 C/S是當(dāng)今比較流行與具有發(fā)展?jié)摿Φ募夹g(shù)之一。使用C/S模式設(shè)計(jì)的客戶、服務(wù)器應(yīng)用系統(tǒng)具有系統(tǒng)結(jié)構(gòu)優(yōu)化、資源利用率高、整體運(yùn)算速度快的優(yōu)點(diǎn),因而得到了廣泛的應(yīng)用。Socket網(wǎng)絡(luò)編程技術(shù)也是當(dāng)今主要的進(jìn)程之間的通信方式,它利用客戶/服務(wù)器模式巧妙地解決了進(jìn)程之間建立通信連接的問(wèn)題?;贑/S模式于Socket網(wǎng)絡(luò)編程技術(shù),本遠(yuǎn)程控制程序才能得以實(shí)現(xiàn)。 3.1 Socket 20世紀(jì)80年代初,美國(guó)政府的高級(jí)研究工程機(jī)構(gòu)(ARPA)給加利福尼亞大學(xué)Berkeley分校
25、提供資金,讓他們?cè)赨NIX操作系統(tǒng)下實(shí)現(xiàn)TCP/IP協(xié)議。在這個(gè)項(xiàng)目中,研究人員為TCP/IP網(wǎng)絡(luò)通信開發(fā)了一個(gè)應(yīng)用程序接口(API)。這個(gè)API就稱為Socket接口。今天,Socket接口是TCP/IP網(wǎng)絡(luò)最通用的API,也是在Internet上進(jìn)行應(yīng)用開發(fā)最為通用的API。 事實(shí)上,Socket(套接字)就是在計(jì)算機(jī)之間提供了一個(gè)通信端口。通過(guò)這個(gè)端口,一臺(tái)計(jì)算機(jī)可以與任何具備套接字的網(wǎng)間計(jì)算機(jī)進(jìn)行通信。一個(gè)Socke只通信的一端,在這一端上可以找到與其對(duì)應(yīng)的一個(gè)名字。一個(gè)正在被使用的套接口都有它的類型和與其相關(guān)的進(jìn)程,Socket存在于整個(gè)通信域中,與對(duì)應(yīng)的并且在相同域的Socket
26、進(jìn)行數(shù)據(jù)交換,即通信。應(yīng)用程序在網(wǎng)絡(luò)上傳輸,接收的信息都通過(guò)這個(gè)套接口來(lái)實(shí)現(xiàn)。在應(yīng)用開發(fā)種就像使用文件句柄一樣,可以對(duì)Socket句柄進(jìn)行讀寫操作。 開始使用套接字編程之前,首先必須了解什么是網(wǎng)間進(jìn)程通訊,什么是服務(wù)方式,以及C/S軟件開發(fā)模式。 進(jìn)程間通信的最初概念來(lái)源于單機(jī)系統(tǒng)。由于每個(gè)進(jìn)程都在自己的地址區(qū)域范圍內(nèi)運(yùn)行,為了保證進(jìn)程間能相互通信而又不干涉他們自己的工作,操作系統(tǒng)被要求提供相應(yīng)的設(shè)施,如UNIX BSD中的管道(Pipe)、命名管道(Named Pipe)和軟中斷信號(hào)(Signal)、UNIX System V的消息(Message)、共享存儲(chǔ)區(qū)(Shared Memor
27、y)和信號(hào)量(Semaphore)等,但都僅限于用在本機(jī)進(jìn)程之間的通信。網(wǎng)間域中的計(jì)算機(jī)要通信必須解決不同計(jì)算機(jī)中進(jìn)程相互通訊的問(wèn)題。為此,首先要解決的是網(wǎng)間進(jìn)程標(biāo)識(shí)問(wèn)題,同一計(jì)算機(jī)上,不同進(jìn)程可以用進(jìn)程號(hào)(Process ID)作為唯一標(biāo)識(shí),但到了網(wǎng)絡(luò)環(huán)境下,不同的計(jì)算機(jī)中很可能存在擁有相同進(jìn)程號(hào)的進(jìn)程,比如A計(jì)算機(jī)存在進(jìn)程號(hào)為101,B計(jì)算機(jī)也很可能存在進(jìn)程號(hào)名為101的進(jìn)程。其次,用于網(wǎng)絡(luò)通訊的協(xié)議眾多,不同的協(xié)議也有自己獨(dú)有的辨識(shí)方式,因此,要實(shí)現(xiàn)網(wǎng)間域內(nèi)計(jì)算機(jī)通訊還要解決眾多協(xié)議識(shí)別的問(wèn)題。 在網(wǎng)絡(luò)的分層模型中,各層嚴(yán)格遵循著單向依賴,各層之間分工明確,但又相互協(xié)作,他們之間的協(xié)作
28、主要體現(xiàn)在各相鄰層邊緣的應(yīng)用上?!胺?wù)”是描述相鄰層之間關(guān)系的抽象概念,即網(wǎng)絡(luò)中各層向緊鄰上層提供的一組操作。下層是服務(wù)的提供者,上層是請(qǐng)求服務(wù)的用戶。服務(wù)的表現(xiàn)形式是原語(yǔ)(Primitive),如系統(tǒng)調(diào)用或庫(kù)函數(shù)等。系統(tǒng)調(diào)用是操作系統(tǒng)內(nèi)核向網(wǎng)絡(luò)應(yīng)用程序或高層協(xié)議提供的服務(wù)原語(yǔ)。在國(guó)際標(biāo)準(zhǔn)化組織(ISO)的術(shù)語(yǔ)中,網(wǎng)絡(luò)層及其以下各層又稱為通信子網(wǎng),只是實(shí)現(xiàn)了點(diǎn)對(duì)點(diǎn)之間的通信,沒(méi)有程序或進(jìn)程的概念。而傳輸層實(shí)現(xiàn)的是“端到端”通信,引進(jìn)網(wǎng)間進(jìn)程通信概念,同時(shí)也要解決差錯(cuò)控制、流量控制、數(shù)據(jù)排序(報(bào)文排序)及連接管理等問(wèn)題。為此提供不同的服務(wù)方式:面向連接(虛電路)的服務(wù)或無(wú)連接的服務(wù)。 面向連接
29、服務(wù)是電話系統(tǒng)服務(wù)模式的抽象,即每一次完整的數(shù)據(jù)傳輸都要經(jīng)過(guò)建立、連接、數(shù)據(jù)傳輸及終止連接的過(guò)程。在數(shù)據(jù)傳輸過(guò)程中,各數(shù)據(jù)分組不攜帶目的地址,而使用連接號(hào)(Connect ID)。本質(zhì)上,連接是一個(gè)通信管道,收發(fā)數(shù)據(jù)順序一直,內(nèi)容相同。其中TCP協(xié)議就提供面向連接的可靠通信協(xié)議。 無(wú)連接的服務(wù)是郵政系統(tǒng)服務(wù)的抽象,每個(gè)分組都攜帶完整的目的地址,各分組在系統(tǒng)中獨(dú)立傳送。無(wú)連接服務(wù)不能保證分組的先后順序,不進(jìn)行分組出錯(cuò)的恢復(fù)與重傳,不保證傳輸?shù)目煽啃?。提供無(wú)連接的數(shù)據(jù)報(bào)服務(wù)的常用協(xié)議是UDP協(xié)議。 在TCP/IP網(wǎng)絡(luò)應(yīng)用中,兩個(gè)進(jìn)程之間的相互通信主要基于C/S模式(Client/Server)
30、。即客戶端向服務(wù)端發(fā)出請(qǐng)求,服務(wù)端接收待來(lái)自客戶端的請(qǐng)求好,調(diào)用相應(yīng)的服務(wù)。C/S模式的建立基于以下兩點(diǎn):首先,建立網(wǎng)絡(luò)的起因是網(wǎng)絡(luò)中軟硬件資源、運(yùn)算能力和信息不均等,需要共享,從而造就擁有眾多資源的主機(jī)提供服務(wù),資源較少的客戶請(qǐng)求服務(wù)這一非對(duì)等作用;其次,網(wǎng)間進(jìn)程通信完全是異步的,相互通信的進(jìn)程間既不存在父子關(guān)系,又不共享內(nèi)存緩沖區(qū),因此需要一種機(jī)制為希望通信的進(jìn)程間建立聯(lián)系,為兩者的數(shù)據(jù)交換提供同步,這就是基于客戶機(jī)/服務(wù)器式的TCP/IP。 3.2 Socket分類 TCP/IP的Socket提供下列三種類型套接字。 (1) 原始套接字 該接口允許對(duì)較低層協(xié)議,如IP,ICMP的
31、直接訪問(wèn)。它通常用于檢驗(yàn)新的協(xié)議實(shí)現(xiàn)或訪問(wèn)現(xiàn)有服務(wù)配置中的新設(shè)備 (2) TCP流式套接字 如果我們需要一個(gè)可靠的連接,用來(lái)使數(shù)據(jù)按順序、無(wú)錯(cuò)的發(fā)送到目標(biāo)端,就需要流式套接字。流式套接字提供一種可靠的面向連接地傳輸方法。數(shù)據(jù)無(wú)重復(fù)、無(wú)差錯(cuò),并且按發(fā)送端發(fā)出數(shù)據(jù)的順序進(jìn)行接收。不管對(duì)單個(gè)的數(shù)據(jù)報(bào)或者是一整個(gè)數(shù)據(jù)包,流式套接字都提供一種協(xié)議的歷史傳輸——TCP。除此之外,在數(shù)據(jù)進(jìn)行傳輸時(shí),如果一端的連接斷開,則另一端的應(yīng)用程序會(huì)接到通知。流式套接字內(nèi)設(shè)流量控制,避免數(shù)據(jù)流超限;數(shù)據(jù)被看成字節(jié)流,無(wú)長(zhǎng)度限制。 (3) UDP數(shù)據(jù)報(bào)套接字 數(shù)據(jù)報(bào)套接字是提供一種非連接、不可靠的通信方式。在這里
32、的“不可靠”是指發(fā)送的數(shù)據(jù)不能得到保障,也不保障數(shù)據(jù)按原來(lái)發(fā)出時(shí)的順序到達(dá)目標(biāo)端。數(shù)據(jù)包以獨(dú)立包形式被發(fā)送,不提供無(wú)錯(cuò)保證,數(shù)據(jù)可能丟失或重復(fù),并且順序混亂。事實(shí)上,一份數(shù)據(jù)可能不止一次被發(fā)送。對(duì)于基于Java的Socket網(wǎng)絡(luò)編程的TCP/IP實(shí)現(xiàn),數(shù)據(jù)報(bào)套接字使用用戶數(shù)據(jù)報(bào)協(xié)議(UDP)。雖然在通常情況下,在同一臺(tái)計(jì)算機(jī)上的兩個(gè)進(jìn)程或在輕負(fù)載的局域網(wǎng)所連接的兩臺(tái)計(jì)算機(jī)的進(jìn)程之間進(jìn)行通信時(shí),可能不會(huì)出現(xiàn)數(shù)據(jù)包丟失或沒(méi)按照順序到達(dá)及又重復(fù)發(fā)送的情況,但在編寫實(shí)用UDP協(xié)議進(jìn)行進(jìn)程間通信的程序是,應(yīng)考慮到這些情況,并且能做出應(yīng)對(duì)措施。當(dāng)然,如果為非常復(fù)雜的網(wǎng)絡(luò)(如Internet)編寫通信應(yīng)用程
33、序,就應(yīng)該考慮到數(shù)據(jù)報(bào)套接字的不可靠性。如果應(yīng)用程序不能很好的處理這些問(wèn)題,很可能導(dǎo)致程序崩潰。盡管如此,數(shù)據(jù)報(bào)套接字在發(fā)送數(shù)據(jù)包或者記錄形數(shù)據(jù)時(shí)仍然有用。另外,數(shù)據(jù)報(bào)套接字還提供向多個(gè)目的地發(fā)送廣播數(shù)據(jù)包的能力。 3.3 基本套接字函數(shù)調(diào)用 大多數(shù)的數(shù)據(jù)報(bào)套接字應(yīng)用程序都使用一個(gè)規(guī)定的事件序列來(lái)完成客戶應(yīng)用程序與服務(wù)器之間的通信,如下圖所示: 圖 3.1 信息交互 Fig.3.1 Information interaction 首先服務(wù)端與客戶端都要?jiǎng)?chuàng)建一個(gè)Socket(套接字),然后服務(wù)端ServerSocket綁定端口和IP,這樣客戶端就能使用同一端口表示服務(wù)器套接字,然后
34、服務(wù)器與客戶端建立通信,即Sendto()和Recvfrom()信息交互。下面步奏介紹了套接字使用的步奏。 3.3.1創(chuàng)建套接字 Java對(duì)Socket操作進(jìn)行了很好的封裝,即.ServerSocket類,此類實(shí)現(xiàn)服務(wù)器套接字。服務(wù)器套接字等待請(qǐng)求通過(guò)網(wǎng)絡(luò)傳入。它基于請(qǐng)求執(zhí)行某些操作,然后可能向請(qǐng)求者返回結(jié)果。在這里我們使用到的構(gòu)造方法為ServerSocket(int port);該構(gòu)造方法創(chuàng)建以本機(jī)IP為IP地址,以port為端口的套接字,參數(shù)port - 端口號(hào);或者為 0,表示使用任何空閑端口。 3.3.2建立套接字連接 等待連接我們使用了.ServerSocket類的acc
35、ept()方法,該方法偵聽并接受到此套接字的連接。此方法在連接傳入之前一直阻塞。一旦接受到請(qǐng)求,則創(chuàng)建新的套接字與之連接交互信息。 3.3.3數(shù)據(jù)傳輸 有了套接字連接后,我們就可以進(jìn)行任意的數(shù)據(jù)傳輸了。在自定義了Sendto()與Recvfrom()方法后則可進(jìn)行任意數(shù)據(jù)傳輸。Java對(duì)傳輸流進(jìn)行了很好的封裝,這里我們主要用到j(luò)ava.io以及javax.imageio 里面的流操作類: (1) javax.imageio. ImageIO類 該類包含一些用來(lái)查找 ImageReader 和 ImageWriter 以及執(zhí)行簡(jiǎn)單編碼和解碼的靜態(tài)便捷方法。主要用于遠(yuǎn)程圖像的傳輸。
36、 read(URL input)方法:返回一個(gè) BufferedImage,作為使用 ImageReader(它是從當(dāng)前已注冊(cè) ImageReader 中自動(dòng)選擇的)解碼所提供 URL 的結(jié)果。InputStream 是從 URL 中獲得的,它被封裝在 ImageInputStream 中。 write(RenderedImage im, String formatName, ImageOutputStream output)方法:使用支持給定格式的任意 ImageWriter 將一個(gè)圖像寫入 ImageOutputStream。從當(dāng)前流指針開始將圖像寫入ImageOutputStream
37、,并覆蓋該點(diǎn)之后的現(xiàn)有流數(shù)據(jù)(如果有)。 此方法在寫入操作完成后不會(huì)關(guān)閉提供的 ImageOutputStream;一個(gè)嚴(yán)謹(jǐn)?shù)某绦颍瑧?yīng)該在實(shí)用完后對(duì)流進(jìn)行關(guān)閉,減輕系統(tǒng)負(fù)擔(dān)。 (2) java.io. InputStream類 read()方法:從輸入流中讀取數(shù)據(jù)的下一個(gè)字節(jié)。返回 0 到 255 范圍內(nèi)的 int 字節(jié)值。如果因?yàn)橐呀?jīng)到達(dá)流末尾而沒(méi)有可用的字節(jié),則返回值 -1。在輸入數(shù)據(jù)可用、檢測(cè)到流末尾或者拋出異常前,此方法一直阻塞。 (3) java.io. OutputStream類 write(int b)方法:將一個(gè) integer(數(shù)組長(zhǎng)度)寫入此流。 (4) ja
38、va.io. File類 主要用于文件或目錄的操作。 File(String pathname)方法:通過(guò)將給定路徑名字符串轉(zhuǎn)換為抽象路徑名來(lái)創(chuàng)建一個(gè)新 File 實(shí)例。如果給定字符串是空字符串,那么結(jié)果是空抽象路徑名。 delete()方法:刪除此抽象路徑名表示的文件或目錄。如果此路徑名表示一個(gè)目錄,則該目錄必須為空才能刪除。 exists()方法:測(cè)試此抽象路徑名表示的文件或目錄是否存在。 isDirectory()方法:測(cè)試此抽象路徑名表示的文件是否是一個(gè)目錄。 isFile()方法:測(cè)試此抽象路徑名表示的文件是否是一個(gè)標(biāo)準(zhǔn)文件。 list()方法:返回一個(gè)字
39、符串?dāng)?shù)組,這些字符串指定此抽象路徑名表示的目錄中的文件和目錄。 mkdirs()方法:創(chuàng)建此抽象路徑名指定的目錄,包括所有必需但不存在的父目錄。 listRoots()方法:列出可用的文件系統(tǒng)根。 (5) java.lang.Runtime類 exec(String command)方法:在單獨(dú)的進(jìn)程中執(zhí)行指定的字符串命令。參數(shù)command:一條指定的系統(tǒng)命令。 (6) java.awt.Robot類 使用該類提供的一系列方法可以模擬鼠標(biāo)、鍵盤操作事件以及屏幕截圖,達(dá)到遠(yuǎn)程監(jiān)控的目的。 createScreenCapture(Rectangle screenRect)
40、方法:創(chuàng)建包含從屏幕中讀取的像素的圖像。該圖像不包括鼠標(biāo)光標(biāo)。 mouseMove(int x, int y)方法:將鼠標(biāo)指針移動(dòng)到給定屏幕坐標(biāo)。 mouseWheel(int wheelAmt)方法:在配有滾輪的鼠標(biāo)上旋轉(zhuǎn)滾輪。 keyPress(int keycode)方法:按下給定的鍵。應(yīng)該使用 keyRelease 方法釋放該鍵。 keyRelease(int keycode)方法:釋放給定的鍵。 mousePress(int buttons)方法:按下一個(gè)或多個(gè)鼠標(biāo)按鈕。應(yīng)該使用 mouseRelease 方法釋放鼠標(biāo)按鈕。 mouseRelease(int butto
41、ns)方法:釋放一個(gè)或多個(gè)鼠標(biāo)按鈕。 以上為數(shù)據(jù)交互使用到的Java類,Java很好的封裝了這些操作,使得程序的設(shè)計(jì)簡(jiǎn)單又結(jié)構(gòu)性強(qiáng),更好的體現(xiàn)了Java的面向?qū)ο筇匦浴? 3.3.4關(guān)閉套接字 在數(shù)據(jù)交互完成后,都要改關(guān)閉不在使用的Socket,本遠(yuǎn)程控制軟件使用了close()方法關(guān)閉此套接字。 所有當(dāng)前阻塞于此套接字上的 I/O 操作中的線程都將拋出SocketException。 套接字被關(guān)閉后,便不可在以后的網(wǎng)絡(luò)連接中使用(即無(wú)法重新連接或重新綁定)。關(guān)閉此套接字也將會(huì)關(guān)閉該套接字的 InputStream 和 OutputStream。 如果此套接字有一個(gè)與之關(guān)聯(lián)的通道,則關(guān)閉該
42、通道。 3.4 C/S結(jié)構(gòu)特點(diǎn)及發(fā)展 C/S又稱Client/Server或客戶/服務(wù)器模式。它是軟件系統(tǒng)體系結(jié)構(gòu),通過(guò)它可以充分利用兩端硬件環(huán)境的優(yōu)勢(shì),將任務(wù)合理分配到Client端和Server端來(lái)實(shí)現(xiàn),降低了系統(tǒng)的通訊開銷。目前大多數(shù)應(yīng)用軟件系統(tǒng)都是Client/Server形式的兩層結(jié)構(gòu),由于現(xiàn)在的軟件應(yīng)用系統(tǒng)正在向分布式的Web應(yīng)用發(fā)展,Web和Client/Server 應(yīng)用都可以進(jìn)行同樣的業(yè)務(wù)處理,應(yīng)用不同的模塊共享邏輯組件;但兩種應(yīng)用都有著自己的優(yōu)勢(shì),怎么使用取舍取決于對(duì)業(yè)務(wù)的需求。 傳統(tǒng)的C/S體系結(jié)構(gòu)雖然采用的是開放模式,但這只是系統(tǒng)開發(fā)一級(jí)的開放性,在特定的應(yīng)用中
43、無(wú)論是Client端還是Server端都還需要特定的軟件支持。由于沒(méi)能提供用戶真正期望的開放環(huán)境,C/S結(jié)構(gòu)的軟件需要針對(duì)不同的操作系統(tǒng)系統(tǒng)開發(fā)不同版本的軟件, 加之產(chǎn)品的更新?lián)Q代十分快,已經(jīng)很難適應(yīng)百臺(tái)電腦以上局域網(wǎng)用戶同時(shí)使用。而且代價(jià)高, 效率低。但是Java的平臺(tái)無(wú)關(guān)性可以很好的解決這個(gè)問(wèn)題,實(shí)用Java開發(fā)的應(yīng)用程序,不管在什么樣的操作系統(tǒng)中都能得到很好的支持。 用C/S模式設(shè)計(jì)本系統(tǒng)的優(yōu)勢(shì)在于: (1) 應(yīng)用服務(wù)器運(yùn)行數(shù)據(jù)負(fù)荷較輕。最簡(jiǎn)單的C/S體系結(jié)構(gòu)的數(shù)據(jù)庫(kù)應(yīng)用由兩部分組成,即客戶應(yīng)用程序和服務(wù)器程序。二者可分別稱為客戶端與服務(wù)端。運(yùn)行服務(wù)端的機(jī)器,也稱為應(yīng)用服務(wù)器。一旦服
44、務(wù)器程序被啟動(dòng),就隨時(shí)等待響應(yīng)客戶程序發(fā)來(lái)的請(qǐng)求;客戶應(yīng)用程序運(yùn)行在用戶自己的電腦上,對(duì)應(yīng)服務(wù)器,可稱為客戶電腦,當(dāng)需要對(duì)遠(yuǎn)程控制端進(jìn)行操作時(shí),客戶程序就自動(dòng)地尋找服務(wù)器程序,并向其發(fā)出請(qǐng)求,服務(wù)器程序根據(jù)預(yù)定的規(guī)則作出應(yīng)答,送回結(jié)果,應(yīng)用服務(wù)器運(yùn)行數(shù)據(jù)負(fù)荷較輕。 (2) 服務(wù)端對(duì)于業(yè)務(wù)邏輯進(jìn)行和很好的封裝。對(duì)于客戶端傳來(lái)的請(qǐng)求,服務(wù)端進(jìn)行很好的處理,這里我們把處理響應(yīng)的業(yè)務(wù)邏輯都封裝在服務(wù)端里,使得客戶端顯得非常“瘦小”,是軟件實(shí)用更加靈活。 除此之外,C/S模式設(shè)計(jì)的軟件能充分發(fā)揮客戶端PC的處理能力,很多工作可以在客戶端處理后再提交給服務(wù)器。對(duì)應(yīng)的優(yōu)點(diǎn)就是客戶端響應(yīng)速度快。 3.5
45、 TCP/IP體系結(jié)構(gòu) TCP/IP這個(gè)協(xié)議遵守一個(gè)四層的模型概念:應(yīng)用層、傳輸層、網(wǎng)絡(luò)互聯(lián)層和網(wǎng)絡(luò)層 3.5.1網(wǎng)絡(luò)層 TCP/IP模型的基層是網(wǎng)絡(luò)接口層。負(fù)責(zé)數(shù)據(jù)幀的發(fā)送和接收,幀是獨(dú)立的網(wǎng)絡(luò)信息傳輸單元。網(wǎng)絡(luò)接口層將幀放在網(wǎng)上,或從網(wǎng)上把幀取下來(lái)。實(shí)際上TCP/IP參考模型沒(méi)有真正描述這一層的實(shí)現(xiàn),只是要求能夠提供給其上層—網(wǎng)絡(luò)互連層一個(gè)訪問(wèn)接口,以便在其上傳遞IP分組。由于這一層次未被定義,所以其具體的實(shí)現(xiàn)方法將隨著網(wǎng)絡(luò)類型的不同而不同?!? 3.5.2互聯(lián)層 網(wǎng)絡(luò)互連層是整個(gè)TCP/IP協(xié)議棧的核心。它的功能是把分組發(fā)往目標(biāo)網(wǎng)絡(luò)或主機(jī)。同時(shí),為了盡快地發(fā)送分組,可能需要沿不同
46、的路徑同時(shí)進(jìn)行分組傳遞。因此,分組到達(dá)的順序和發(fā)送的順序可能不同,這就需要上層必須對(duì)分組進(jìn)行排序?!? 網(wǎng)絡(luò)互連層定義了分組格式和協(xié)議,即IP協(xié)議(Internet Protocol)。 網(wǎng)絡(luò)互連層除了需要完成路由的功能外,也可以完成將不同類型的網(wǎng)絡(luò)(異構(gòu)網(wǎng))互連的任務(wù)。除此之外,網(wǎng)絡(luò)互連層還需要完成擁塞控制的功能?!? 互聯(lián)協(xié)議將數(shù)據(jù)包封裝成internet數(shù)據(jù)報(bào),并運(yùn)行必要的路由算法。 這里有四個(gè)互聯(lián)協(xié)議: (1) 網(wǎng)際協(xié)議IP:負(fù)責(zé)在主機(jī)和網(wǎng)絡(luò)之間尋址和路由數(shù)據(jù)包。 (2) 地址解析協(xié)議ARP:獲得同一物理網(wǎng)絡(luò)中的硬件主機(jī)地址。 (3) 網(wǎng)際控制消息協(xié)議ICMP:發(fā)送
47、消息,并報(bào)告有關(guān)數(shù)據(jù)包的傳送錯(cuò)誤。 (4) 互聯(lián)組管理協(xié)議IGMP:被IP主機(jī)拿來(lái)向本地多路廣播路由器報(bào)告主機(jī)組成員。 3.5.3 傳輸層 傳輸協(xié)議在計(jì)算機(jī)之間提供通信會(huì)話。傳輸協(xié)議的選擇根據(jù)數(shù)據(jù)傳輸方式而定。 兩個(gè)傳輸協(xié)議: (1) 傳輸控制協(xié)議TCP:為應(yīng)用程序提供可靠的通信連接。適合于一次傳輸大批數(shù) 據(jù)的情況。并適用于要求得到響應(yīng)的應(yīng)用程序。 (2) 用戶數(shù)據(jù)報(bào)協(xié)議UDP:提供了無(wú)連接通信,且不對(duì)傳送包進(jìn)行可靠的保證。適 合于一次傳輸小量數(shù)據(jù),可靠性則由應(yīng)用層來(lái)負(fù)責(zé)。 3.5.4應(yīng)用層 TCP/IP模型將OSI參考模型中的會(huì)話層和表示層的功能合并到應(yīng)用層實(shí)現(xiàn)。
48、 應(yīng)用層面向不同的網(wǎng)絡(luò)應(yīng)用引入了不同的應(yīng)用層協(xié)議。其中,有基于TCP協(xié)議的,如文件傳輸協(xié)議(File Transfer Protocol,F(xiàn)TP)、虛擬終端協(xié)議(TELNET)、超文本鏈接協(xié)議(Hyper Text Transfer Protocol,HTTP),也有基于UDP協(xié)議的。 3.6 多線程 在一個(gè)應(yīng)用程序中,一些獨(dú)立運(yùn)行的程序片斷被稱作“線程”(Thread),利用它編程的概念就叫作“多線程技術(shù)”。多線程技術(shù)一個(gè)常見的例子就是用戶界面。利用線程當(dāng)用戶按下按鈕后,方法與主界面流程可以一起往下執(zhí)行,而不是等待方法執(zhí)行后才繼續(xù)往下。 在計(jì)算機(jī)編程中,一個(gè)基本的概念就是同時(shí)對(duì)多個(gè)
49、任務(wù)加以控制。許多程序設(shè)計(jì)問(wèn)題都要求程序能夠同步的處理工作,即工作能同時(shí)進(jìn)行,而不是等待一個(gè)方法執(zhí)行完后再接著執(zhí)行主進(jìn)程。對(duì)于不同的需求,可以通過(guò)多種途徑達(dá)到這個(gè)目的。最開始的時(shí)候,那些掌握機(jī)器低級(jí)語(yǔ)言的程序員編寫一些“中斷服務(wù)例程”,主進(jìn)程的暫停是通過(guò)硬件級(jí)的中斷來(lái)實(shí)現(xiàn)的。盡管這個(gè)方法很有用,但這樣的程序很難移植,由此造成了另一類的代價(jià)高昂?jiǎn)栴}。中斷對(duì)那些實(shí)時(shí)性很強(qiáng)的任務(wù)來(lái)說(shuō)是很有必要的。但對(duì)于其他許多問(wèn)題,只要求將問(wèn)題劃分進(jìn)入獨(dú)立運(yùn)行的程序片斷中,使整個(gè)程序能更迅速地響應(yīng)用戶的請(qǐng)求。 最開始,線程只是用于分配單個(gè)處理器的處理時(shí)間的一種工具。但假如操作系統(tǒng)本身支持多個(gè)處理器,那么每個(gè)線
50、程都可分配給一個(gè)不同的處理器來(lái)處理,真正進(jìn)入“并行運(yùn)算”狀態(tài)。從程序設(shè)計(jì)語(yǔ)言的角度看,多線程操作最有價(jià)值的特性之一就是程序員不必關(guān)心到底使用了多少個(gè)處理器。程序在邏輯意義上被分割為數(shù)個(gè)線程;假如機(jī)器本身安裝了多個(gè)處理器,那么程序會(huì)運(yùn)行得更快,毋需作出任何特殊的調(diào)校。如果僅局限于如上的操作,那多線程就太簡(jiǎn)單了。其實(shí)不然,實(shí)用多線程必須解決一個(gè)重要的問(wèn)題:資源共享。如果有多個(gè)線程同時(shí)運(yùn)行,而且它們都需要使用到這個(gè)資源,就會(huì)遇到資源共享的問(wèn)題。例如兩個(gè)進(jìn)程不能同時(shí)調(diào)用同一臺(tái)打印機(jī)打印,必須等一個(gè)進(jìn)程結(jié)束運(yùn)行后另一個(gè)進(jìn)程在進(jìn)行調(diào)用。為解決這個(gè)問(wèn)題,對(duì)那些可共享的資源來(lái)說(shuō)(比如打印機(jī)),它們?cè)谑褂闷陂g必
51、須進(jìn)入鎖定狀態(tài)。所以一個(gè)線程可將資源鎖定,在完成了它的任務(wù)后,再解開(釋放)這個(gè)鎖,使其他線程可以接著使用同樣的資源,這就是所謂的進(jìn)程同步問(wèn)題。 多線程是為了同步完成多項(xiàng)任務(wù),不是為了提高運(yùn)行效率,而是為了提高資源使用效率來(lái)提高系統(tǒng)的效率。線程是在同一時(shí)間需要完成多項(xiàng)任務(wù)的時(shí)候?qū)崿F(xiàn)的。 使用多線程的好處: (1) 使用線程可以把占據(jù)長(zhǎng)時(shí)間的程序中的任務(wù)放到后臺(tái)去處理,用戶界面可以更加吸引人,比如,我在單擊了遠(yuǎn)程控制后,任然能進(jìn)行資源管理器操作,而不是等遠(yuǎn)程操作結(jié)束后才能進(jìn)行資源管理器操作。 (2) 程序的運(yùn)行速度可能加快。因?yàn)槭恰巴綀?zhí)行”的,不需要等待,所以可以加快程序的運(yùn)行速度。
52、 (3) 在一些需要阻塞等待操作的程序中,線程是很實(shí)用的,如數(shù)據(jù)傳輸,等待連接,等待輸入等,并不一定要上述方法都執(zhí)行,主進(jìn)程才能繼續(xù)執(zhí)行,這樣帶來(lái)的方便是非常大的。 3.7 Java遠(yuǎn)程控制的基本原理 (1) Socket 、ServerSocket Socket 位于.包中,這是一個(gè)對(duì)于網(wǎng)絡(luò)通信來(lái)說(shuō)及其重要的類,無(wú)論是那種語(yǔ)言,都會(huì)有Socket網(wǎng)絡(luò)編程的應(yīng)用方法,存在的差異也僅僅是在表示和組織上有所不同,Socket中文稱它為套接字,Java API中可以查看相應(yīng)的介紹,主要由ServerSocket和Socket之間建立連接。一個(gè)ServerSocket構(gòu)造一對(duì)通信套接字方法如下:
53、 ServerSocket sr=new ServerSocket(port); Socket sc=new Socket("ip",port); 其中ServerSocket 的accpet()方法十分重要,當(dāng)一個(gè)服務(wù)套接字建立之后它會(huì)一直阻塞等待一個(gè)套接字的請(qǐng)求,直到建立連接。 部分計(jì)算機(jī)網(wǎng)絡(luò)的書籍對(duì)套接字有這樣的定義為端口+IP地址;一個(gè)套接字是由一個(gè)由一個(gè)IP地址和一個(gè)端口組成的,在網(wǎng)絡(luò)通信中的底層實(shí)現(xiàn)也的確如此,要建立進(jìn)程之間的通信就必須使用一個(gè)未被占用的端口進(jìn)行等待連接,在連接端口之后才能在該端口上通信,以實(shí)現(xiàn)進(jìn)程間的通信。 (2) InputStream 、Ou
54、tputStream 當(dāng)一個(gè)套接字連接成功后就可以獲得基于這個(gè)套接字的輸入、輸出流,一切數(shù)據(jù)的發(fā)送和接受都離不開輸出、輸入流,我們可以通過(guò)流封裝的方法選擇你要輸入或者輸出的數(shù)據(jù)類型,通過(guò)轉(zhuǎn)換流可以把輸入、輸出流轉(zhuǎn)換到我們需要的數(shù)據(jù)傳輸類型。 (3) 認(rèn)識(shí)RPC RPC 是英文遠(yuǎn)程方法調(diào)用的縮寫,見名知意,就是在本地計(jì)算機(jī)上調(diào)用遠(yuǎn)程計(jì)算機(jī)上的方法或者過(guò)程。 既然我們已經(jīng)能通過(guò)Socket進(jìn)行網(wǎng)間進(jìn)程通訊,進(jìn)行數(shù)據(jù)傳輸,那么,往更深一層去想,如果是傳輸命令讓計(jì)算機(jī)做出響應(yīng)呢?因此,實(shí)現(xiàn)這一假設(shè)的過(guò)程,即為遠(yuǎn)程控制軟件設(shè)計(jì)的基礎(chǔ)思想。 在這里Java提供了一個(gè)非常好的命令響應(yīng)的封裝
55、類——RunTime類,該類提供方法執(zhí)行諸如CMD控制命令。 Runtime ec=Runtime.getRuntime(); ec.exec("命令"); Exec()方法就可以放入你想要運(yùn)行的命令這樣你就可以在機(jī)器上運(yùn)行你的指令了。那么到目前為止,一個(gè)基于Java語(yǔ)言開發(fā)的遠(yuǎn)程控制程序的雛形就展現(xiàn)在我們面前了,試想,如果我們能遠(yuǎn)程調(diào)用CMD命令已經(jīng)相當(dāng)于無(wú)所不能了。 以上就是一個(gè)簡(jiǎn)易的Java遠(yuǎn)程控制的實(shí)現(xiàn),當(dāng)然本系統(tǒng)的設(shè)計(jì)要比此步奏復(fù)雜許多,但是基本原理相同。 4 C/S模式遠(yuǎn)程控制系統(tǒng)的設(shè)計(jì)實(shí)現(xiàn) 4.1 主要實(shí)現(xiàn)功能 (1) 查看被控制端的文件目錄清單;
56、(2) 下載、上傳、刪除文件; (3) 強(qiáng)迫被控制端重新啟動(dòng)或關(guān)機(jī); (4) 直接執(zhí)行任何可執(zhí)行命令,打開應(yīng)用程序; (5) 控制被控制端的屏幕,在本地直接操作被控制端計(jì)算機(jī); 4.2 Client(監(jiān)控端)設(shè)計(jì) Client的界面設(shè)計(jì)使用的是Java提供的GUI,具體界面如下圖 圖 4.1 客戶端 Fig.4.1 Client 主要包括登錄、遠(yuǎn)程資源管理器、遠(yuǎn)程控制監(jiān)視、遠(yuǎn)程控制臺(tái)、遠(yuǎn)程關(guān)機(jī)、退出以及幫助。主要用于發(fā)送相應(yīng)命令以及處理相應(yīng)返回信息,具體流程如下圖所示: 圖 4.2 客戶端流程 Fig.4.2 The client processes 4.2
57、.1文件操作client.files 文件操作包含客戶端的上傳文件(SendFile)、下載文件(DownFile),文件一般操作(FileControl)以及初始化被控端磁盤(getIniDrivers)。 (1) 初始化被控端磁盤(getIniDrivers) 作為資源管理器第一個(gè)步驟,首先要初始化磁盤,既獲得被控端磁盤驅(qū)動(dòng)情況,具體體現(xiàn)在操作界面右側(cè)的磁盤目錄樹上,主要實(shí)現(xiàn)方法為程序啟動(dòng)之初,接受由Server端發(fā)來(lái)的磁盤信息,然后解析為磁盤字符數(shù)組,再體現(xiàn)到操作界面上。該類主要在初始化的時(shí)候調(diào)用。 主要用到public String[] getDrivers()方法,該方法接
58、收來(lái)自服務(wù)器的數(shù)據(jù),并轉(zhuǎn)換為字符串?dāng)?shù)組。然后初始化磁盤數(shù)到顯示界面,代碼如下: for (int i = 0; i < countc; i++) { pci[i] = new JPanel(); cc.add(pci[i]); cc1[i] = new JButton(new ImageIcon( "src\\client\\imges\\hd-network.png")); cc1[i].setPreferredSize(new Dimension(25, 28)); cc1[i].setRequestFocusEnabled(false
59、); // 設(shè)置不需要焦點(diǎn) cc1[i].setBorderPainted(false);// 不繪制邊框 cc1[i].addActionListener(this); pci[i].add(cc1[i]); cc2[i] = new JLabel(drivers[i]); pci[i].add(cc2[i]); } 其中drivers[i]就是調(diào)用初始化磁盤方法返回的字符數(shù)組。 (2) 文件一般操作(FileControl) 作為資源管理器的重要類,包含了文件操作命令的發(fā)向Server端,以及接受Server端返回的操作結(jié)果,并且解析為
60、文件數(shù)組反饋到操作界面。主要流程為下圖所示: 等待操作信息(Opera) 發(fā)送命令 接受命令 關(guān)閉Socket 等待操作信息 圖 4.3 操作流程 Fig.4.3 Operation processes 該類中包含文件操作的相關(guān)方法,比如public String[][] getFiles(String opera)方法,public boolean deleteFile(String opera),public boolean upFile(String opera, String upload)和public boolean downFile(String opera,
61、 String download)方法。 public String[][] getFiles(String opera)為根據(jù)地址獲得目錄列表的方法,返回字符數(shù)組,字符數(shù)組包括文件類型,文件名稱、文件絕對(duì)地址,部分代碼如下: InputStream is = socket.getInputStream(); DataInputStream dis = new DataInputStream(is); String info = ""; info = dis.readUTF(); is.close(); socket.close(); if (info != null && i
62、nfo != "") { String s[] = info.trim().split(";"); if (s[0].equals("tj")) { files = new String[s.length - 1][3]; for (int i = 0; i < s.length - 1; i++) { String[] temp = s[i + 1].trim().split(","); if (temp.length >= 3) { files[i][0] = temp[0]; files[i][1] = temp[1]; files[i][2] = temp[2];
63、} else { String t = m.info.getText(); m.info.setText(t + "\n文件信息:port(" + port+ ")文件讀出失敗!"); } } return files; } } 該部分代碼完成的功能是獲取字符串,并根據(jù)分好分割成字符數(shù)組,每一個(gè)字符數(shù)組單元再更具逗號(hào)再分成二維字符串?dāng)?shù)組,最后返回這個(gè)二維字符數(shù)組files,由前臺(tái)顯示出目錄。 public boolean deleteFile(String opera)方法根據(jù)地址刪除服務(wù)端相應(yīng)文件,部分代碼如下: OutputStream os; os = socket
64、.getOutputStream(); DataOutputStream dos = new DataOutputStream(os); dos.writeUTF(opera); dos.flush(); 完成功能為將調(diào)用該方法的傳入的地址參數(shù)發(fā)送到服務(wù)端,服務(wù)端完成刪除并反饋 public boolean upFile(String opera, String upload)方法為上傳方法,參數(shù)Opera為上傳目錄地址,upload為客戶端上傳文件地址,部分代碼如下: try { if (opera == null || opera == "") { socke
65、t.close(); return false; } OutputStream os; os = socket.getOutputStream(); DataOutputStream dos = new DataOutputStream(os); dos.writeUTF(opera); dos.flush(); } catch (IOException e1) { e1.printStackTrace(); } new SendFile(socket, upload, this.m).start(); 其
66、中最為重要的是最后一行new SendFile(socket, upload, this.m).start(),啟用了一個(gè)新的線程進(jìn)行傳輸。 public boolean downFile(String opera, String download)方法為下載服務(wù)端文件,其中參數(shù)opera為下載文件地址,download為保存到本機(jī)地址,部分代碼如下: try { if (opera == null || opera == "") { socket.close(); return false; } OutputStream os; os = socket.getOutputStream(); DataOutputStream dos = new DataOutputStream(os); dos.writeUTF(opera); dos.flush(); } catch (IOException
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 財(cái)務(wù)信息系統(tǒng)設(shè)計(jì)方案(英文版)課件
- 技術(shù)支持考試培訓(xùn)講座課件
- 《電與我們的生活》課件
- xmind簡(jiǎn)單實(shí)用教程..
- 蘇教版科學(xué)四下我們來(lái)養(yǎng)蠶課件
- 分光光度法及分光光度計(jì)使用方法課件
- 蒸汽的力量--課件
- 創(chuàng)意漸變微信社群營(yíng)銷策劃方案PPT模板課件
- 藥店員工用藥知識(shí)培訓(xùn)課件
- 胸膜疾病影像表現(xiàn)課件
- 數(shù)學(xué)ppt課件滬教版版八年級(jí)下冊(cè)專題3-平行四邊形常用輔助線的添法
- 氧供需平衡的監(jiān)控ppt課件
- 小學(xué)小升初英語(yǔ)名詞復(fù)習(xí)課件
- 儀容儀表儀態(tài)培訓(xùn)資料
- 《認(rèn)識(shí)鐘表》復(fù)習(xí)課ppt課件