遠(yuǎn)程主機(jī)信息采集工具的設(shè)計(jì)與實(shí)現(xiàn)_第1頁
遠(yuǎn)程主機(jī)信息采集工具的設(shè)計(jì)與實(shí)現(xiàn)_第2頁
遠(yuǎn)程主機(jī)信息采集工具的設(shè)計(jì)與實(shí)現(xiàn)_第3頁
遠(yuǎn)程主機(jī)信息采集工具的設(shè)計(jì)與實(shí)現(xiàn)_第4頁
遠(yuǎn)程主機(jī)信息采集工具的設(shè)計(jì)與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、 遠(yuǎn)程主機(jī)信息采集工具的設(shè)計(jì)與實(shí)現(xiàn)學(xué)生姓名: 指導(dǎo)老師: 摘 要 本課程設(shè)計(jì)是在Windows系統(tǒng)中,通過軟件MyEclipse使用java語言完成的一個(gè)遠(yuǎn)程主機(jī)信息采集工具。系統(tǒng)基于C/S模式,服務(wù)器端負(fù)責(zé)采集本機(jī)信息并通過套接字來實(shí)現(xiàn)數(shù)據(jù)傳輸,客戶端接收到信息后將信息以列表的形式顯示。用戶通過分析采集信息可以了解到局域網(wǎng)甚至廣域網(wǎng)的運(yùn)行情況、設(shè)備狀況等,從而實(shí)現(xiàn)更好的管理整個(gè)網(wǎng)絡(luò)。關(guān)鍵詞 java;遠(yuǎn)程信息采集工具;Socket套接字;網(wǎng)絡(luò)安全 1 引 言1.1本文主要內(nèi)容本文第一節(jié)主要說明本設(shè)計(jì)的背景及目的;第二節(jié)介紹了本設(shè)計(jì)所涉及的基本原理;第三節(jié)詳細(xì)描述了遠(yuǎn)程主機(jī)信息采集工具的設(shè)計(jì)步

2、驟、部分源代碼以及系統(tǒng)測試結(jié)果;第四節(jié)結(jié)束語以及相關(guān)參考文獻(xiàn)。1.2 設(shè)計(jì)平臺及設(shè)計(jì)語言本系統(tǒng)是在win7操作系統(tǒng)上,通過MyEclipse軟件使用java語言設(shè)計(jì)編寫完成的。1.3 設(shè)計(jì)背景及目的隨著局域網(wǎng)技術(shù)的不斷發(fā)展,它所帶來的管理問題日益嚴(yán)重,根據(jù)權(quán)威機(jī)構(gòu)統(tǒng)計(jì):85%以上的信息安全事件是有內(nèi)部局域網(wǎng)中的終端主機(jī)引起的。通過采集分析網(wǎng)絡(luò)內(nèi)部主機(jī)信息數(shù)據(jù),可以了解到整個(gè)局域網(wǎng)乃至整個(gè)廣域網(wǎng)的運(yùn)行態(tài)勢、網(wǎng)絡(luò)安全狀況、用戶行為模式等信息,為網(wǎng)絡(luò)的運(yùn)行和維護(hù)提供了重要依據(jù),由此可見,采集主機(jī)的信息并匯總分析是網(wǎng)絡(luò)管理不可或缺的一部分。因此,遠(yuǎn)程主機(jī)信息采集工具是開發(fā)勢在必行。遠(yuǎn)程主機(jī)信息采集系統(tǒng)

3、通過對網(wǎng)絡(luò)內(nèi)部筑基信息的軟硬件各類信息采集,并加以分析研究,能夠?qū)Σ环习踩蟮某绦蛟O(shè)備向管理員發(fā)出警告,以達(dá)到減少網(wǎng)絡(luò)管理問題的目的。1.4 課程設(shè)計(jì)的基本任務(wù)本系統(tǒng)要求能采集指定主機(jī)基本信息,并將采集到的信息發(fā)送給指定用戶。計(jì)劃將系統(tǒng)做成C/S模式,服務(wù)器端負(fù)責(zé)采集信息并監(jiān)聽客戶端請求,客戶端向服務(wù)器請求獲取采集到的信息,服務(wù)器與客戶端使用Socket完成數(shù)據(jù)交互。2 設(shè)計(jì)原理2.1 Socket通信原理Socket是進(jìn)程通訊的一種方式,即調(diào)用這個(gè)網(wǎng)絡(luò)庫的一些API函數(shù)實(shí)現(xiàn)分布在不同主機(jī)的相關(guān)進(jìn)程之間的數(shù)據(jù)交換。Socket在應(yīng)用程序中創(chuàng)建,通過綁定與網(wǎng)絡(luò)驅(qū)動(dòng)建立關(guān)系。此后,應(yīng)用程序送給

4、Socket的數(shù)據(jù),由Socket交給網(wǎng)絡(luò)驅(qū)動(dòng)程序向網(wǎng)絡(luò)上發(fā)送出去。計(jì)算機(jī)從網(wǎng)絡(luò)上收到與該Socket綁定IP地址和端口號相關(guān)的數(shù)據(jù)后,由網(wǎng)絡(luò)驅(qū)動(dòng)程序交給Socket,應(yīng)用程序便可從該Socket中提取接收到的數(shù)據(jù),網(wǎng)絡(luò)應(yīng)用程序就是這樣通過Socket進(jìn)行數(shù)據(jù)的發(fā)送與接收的。根據(jù)連接啟動(dòng)的方式以及本地套接字要連接的目標(biāo),套接字之間的連接過程可以分為三個(gè)步驟:服務(wù)器監(jiān)聽,客戶端請求,連接確認(rèn)。(1)服務(wù)器監(jiān)聽:是服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)。(2)客戶端請求:是指由客戶端的套接字提出連接請求,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接

5、字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號,然后就向服務(wù)器端套接字提出連接請求。(3)連接確認(rèn):是指當(dāng)服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求,它就響應(yīng)客戶端套接字的請求,建立一個(gè)新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,連接就建立好了。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請求。2.2 C/S模式在TCP/IP網(wǎng)絡(luò)應(yīng)用中,通信的兩個(gè)進(jìn)程間相互作用的主要模式是客戶/服務(wù)器(Client/Server, C/S)模式,即客戶向服務(wù)器發(fā)出服務(wù)請求,服務(wù)器接收到請求后,提供相應(yīng)的服務(wù)。客戶/服務(wù)器模式的建

6、立基于以下兩點(diǎn): (1)首先,建立網(wǎng)絡(luò)的起因是網(wǎng)絡(luò)中軟硬件資源、運(yùn)算能力和信息不均等,需要共享,從而造就擁有眾多資源的主機(jī)提供服務(wù),資源較少的客戶請求服務(wù)這一非對等作用。 (2)其次,網(wǎng)間進(jìn)程通信完全是異步的,相互通信的進(jìn)程間既不存在父子關(guān)系,又不共享內(nèi)存緩沖區(qū),因此需要一種機(jī)制為希望通信的進(jìn)程間建立聯(lián)系,為二者的數(shù)據(jù)交換提供同步,這就是基于客戶/服務(wù)器模式的TCP/IP。服務(wù)器端:其過程是首先服務(wù)器方要先啟動(dòng),并根據(jù)請求提供相應(yīng)服務(wù): (1)打開一通信通道并告知本地主機(jī),它愿意在某一公認(rèn)地址上的某端口(如FTP的端口可能為21)接收客戶請求; (2)等待客戶請求到達(dá)該端口; (3)接收到客戶

7、端的服務(wù)請求時(shí),處理該請求并發(fā)送應(yīng)答信號。接收到并發(fā)服務(wù)請求,要激活一新進(jìn)程來處理這個(gè)客戶請求(如UNIX系統(tǒng)中用fork、exec)。新進(jìn)程處理此客戶請求,并不需要對其它請求作出應(yīng)答。服務(wù)完成后,關(guān)閉此新進(jìn)程與客戶的通信鏈路,并終止。 (4)返回第(2)步,等待另一客戶請求。 (5)關(guān)閉服務(wù)器客戶端: (1)打開一通信通道,并連接到服務(wù)器所在主機(jī)的特定端口; (2)向服務(wù)器發(fā)服務(wù)請求報(bào)文,等待并接收應(yīng)答;繼續(xù)提出請求. (3)請求結(jié)束后關(guān)閉通信通道并終止。2.3 本系統(tǒng)設(shè)計(jì)原理本系統(tǒng)能夠?qū)崿F(xiàn)對指定IP主機(jī)信息采集功能。系統(tǒng)分為服務(wù)器端和客戶端,服務(wù)器端運(yùn)行在需要盡心信息采集的主機(jī)上,客戶端運(yùn)

8、行在用戶主機(jī)。服務(wù)器端運(yùn)行后創(chuàng)建套接字,并采集本地主機(jī)信息,例如:主機(jī)名、主機(jī)域名、用戶名、主機(jī)IP地址、MAC地址、操作系統(tǒng)的名稱、架構(gòu)、版本等信息,并通過Socket向網(wǎng)絡(luò)發(fā)送出去。客戶端執(zhí)行后,創(chuàng)建套接字,向服務(wù)器發(fā)出請求,通過Socket獲取服務(wù)器端采集的主機(jī)信息,并將信息以列表的形式顯示給用戶。3 設(shè)計(jì)步驟3.1 程序設(shè)計(jì)3.1.1 客戶端 客戶端主要的通信部分的編程思路如下:當(dāng)客戶端產(chǎn)生一個(gè)事件激活事件,在本程序中為點(diǎn)擊一個(gè)按鈕,首先創(chuàng)建套結(jié)字,綁定遠(yuǎn)程主機(jī)的ip和端口,與遠(yuǎn)程主機(jī)進(jìn)行連接,創(chuàng)建輸入流,用來接收存儲遠(yuǎn)程主機(jī)發(fā)送的主機(jī)信息。然后把從遠(yuǎn)程主機(jī)采集過來的信息顯示出來。程序

9、流程圖如圖3.1。 圖3.1 客戶端流程圖 3.1.2 服務(wù)器端 服務(wù)器端有兩個(gè)模塊,為通信模塊和信息采集模塊,通信模塊負(fù)責(zé)和服務(wù)器端進(jìn)行連接和數(shù)據(jù)的傳送,信息采集模塊用來采集本機(jī)的主機(jī)信息。通信模塊的思路和客戶端類似,創(chuàng)建套接字并監(jiān)聽客戶端的連接,建立連接后調(diào)用信息采集模塊,信息采集部分通過調(diào)用Java的有關(guān)采集主機(jī)信息的API完成主機(jī)信息的采集,把最后采集的信息發(fā)送給客戶端。程序流程如圖3.2。 圖3.2 服務(wù)器端流程圖3.2 程序?qū)崿F(xiàn)3.2.1 客戶端通信模塊 當(dāng)用戶輸入指定IP以及端口,點(diǎn)擊獲取之后,執(zhí)行以下程序代碼,創(chuàng)建套接字,向服務(wù)器請求主機(jī)信息,獲取信息后關(guān)閉套接字。具體代碼如下

10、: private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) throws UnknownHostException, IOException ip = jTextField1.getText();port = Integer.parseInt(jTextField2.getText();/轉(zhuǎn)換為int型Socket socket = new Socket(ip, port);/創(chuàng)建套接字DataInputStream dataInputStream = new DataInputStream(socket.get

11、InputStream();/數(shù)據(jù)輸入流DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream();/數(shù)據(jù)輸出流String hostInfo = dataInputStream.readUTF();/獲取服務(wù)器信息jTextArea1.setText(hostInfo);dataInputStream.close();/關(guān)閉輸入流dataOutputStream.close();/關(guān)閉輸出流socket.close();3.2.2 服務(wù)器端模塊服務(wù)器分為通信模塊和信息采集模塊。通信模塊與客

12、戶端通信模塊一樣。信息采集模塊實(shí)現(xiàn)了對主機(jī)信息的采集,當(dāng)執(zhí)行時(shí),創(chuàng)建一個(gè)StringBuilder類,用來保存采集到的主機(jī)信息。程序通過調(diào)用系統(tǒng)方法getenv()獲取主機(jī)名、主機(jī)域名、用戶名;調(diào)用系統(tǒng)方法getProperties()獲取操作系統(tǒng)版名稱、架構(gòu)、版本;調(diào)用getLocalHost()獲取IP地址;調(diào)用getHardwareAddress()獲取MAC地址,并通過一個(gè)for循環(huán)轉(zhuǎn)換MAC地址格式。具體程序如下: public StringBuilder getHostInfo() StringBuilder infoBuilder = new StringBuilder();/*

13、 * 獲取主機(jī)名稱、用戶名、域名 */Map<String, String> map = System.getenv();/獲得鍵值對infoBuilder.append("n主機(jī)用戶名:" + map.get("USERNAME");/ 獲取用戶名infoBuilder.append("n主機(jī)名稱:" +map.get("COMPUTERNAME");/ 獲取計(jì)算機(jī)名infoBuilder.append("n主機(jī)域名:" + map.get("USERDOMAIN&quo

14、t;) + "n");/ 獲取計(jì)算機(jī)域名/* * 獲取主機(jī)ip,mac */try InetAddress inetAddress = InetAddress.getLocalHost();/獲得本地IP地址System.out.println(inetAddress);NetworkInterface networkInterface = NetworkInterface.getByInetAddress(inetAddress);/獲取本地網(wǎng)卡String ip = inetAddress.getHostAddress().toString(); / 獲取主機(jī)ipbyt

15、e mac = networkInterface.getHardwareAddress();/ 獲取主機(jī)MacString sMAC = ""Formatter formatter = new Formatter();for (int i = 0; i < mac.length; i+) sMAC = formatter.format(Locale.getDefault(), "%02X%s", maci, (i < mac.length - 1) ? "-" : "").toString();/Mac

16、地址格式轉(zhuǎn)換infoBuilder.append("n主機(jī)IP:" + ip);/添加到infoBuilder中infoBuilder.append("n主機(jī)MAC:" + sMAC + "n"); catch (Exception e) e.printStackTrace();/* * 獲取主機(jī)操作系統(tǒng)信息 */Properties props = System.getProperties();infoBuilder.append("n操作系統(tǒng)的名稱:" + props.getProperty("os.

17、name");infoBuilder.append("n操作系統(tǒng)的構(gòu)架:" + props.getProperty("os.arch");infoBuilder.append("n操作系統(tǒng)的版本:" + props.getProperty("os.version");return infoBuilder;3.3 測試結(jié)果此次測試以本機(jī)作為測試對象,首先運(yùn)行服務(wù)器端,進(jìn)行信息采集,運(yùn)行結(jié)果如圖3.3所示。 圖3.3 服務(wù)器運(yùn)行截圖當(dāng)用戶在客戶端輸入指定IP,本測試使用本地主機(jī)作為測試,輸入

18、,點(diǎn)擊獲取,采集的主機(jī)信息以列表的形式顯示文本框中。測試結(jié)果如圖3.4所示。 圖3.4 主機(jī)信息采集測試截圖4 結(jié)束語本次課程設(shè)計(jì)的課題是設(shè)計(jì)實(shí)現(xiàn)一個(gè)簡單的端口掃描工具,此次課程設(shè)計(jì)程序在MyEclipse軟件中使用java編寫,該工具可采集指定IP的遠(yuǎn)程主機(jī)的基本信息,并以本地主機(jī)作為測試。經(jīng)過這兩個(gè)星期的課程設(shè)計(jì),通過圖書館和網(wǎng)上查找資料,順利完成了設(shè)計(jì)和開發(fā),遠(yuǎn)程筑基信息采集工具開發(fā)完畢。在整個(gè)設(shè)計(jì)過程中,出現(xiàn)過很多的問題,得到了老師和同學(xué)的幫助,在不斷學(xué)習(xí)的過程中我體會到這次課程設(shè)計(jì)是一個(gè)不斷學(xué)習(xí)的過程,從設(shè)計(jì)初的模糊認(rèn)識到最后能夠順利完成,我體會到在實(shí)踐中學(xué)習(xí)的重要性。設(shè)計(jì)過程中,由

19、于要實(shí)現(xiàn)某些功能,網(wǎng)上資源解決了我的問題。多借鑒網(wǎng)絡(luò)資源也是一種很好的學(xué)習(xí)方法總之,通過這次課程設(shè)計(jì),我深刻體會到要做好一個(gè)完整的系統(tǒng),需要有系統(tǒng)的思維方式和方法,對待一個(gè)新的問題,要耐心、要善于運(yùn)用已有的資源來充實(shí)自己。同時(shí)我也深刻的認(rèn)識到,在對待一個(gè)新事物時(shí),一定要從整體考慮,完成一步之后再作下一步,這樣對于系統(tǒng)而言才能更加有效。參考文獻(xiàn)1 孫鐘秀, 費(fèi)翔林, 駱斌. 操作系統(tǒng)教程(第4版) M. 北京: 高等教育出版社, 20082 Y. Daniel Liang . Java語言程序設(shè)計(jì)基礎(chǔ)篇. 北京:機(jī)械工業(yè)出版社,20113 范建華、胥光輝、張濤 等譯TCP/IP詳解 卷1:協(xié)議機(jī)

20、械工業(yè)出版社2009年第1版。4 謝希仁. 計(jì)算計(jì)網(wǎng)絡(luò)(第5版) M. 北京:電子工業(yè)出版社, 20085 遠(yuǎn)程主機(jī)信息采集工具的設(shè)計(jì)與實(shí)現(xiàn) -碩士論文 6 基于WMI遠(yuǎn)程主機(jī)信息采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)-數(shù)字通信 附件 1 :遠(yuǎn)程主機(jī)信息采集工具源程序代碼(1) 客戶端源代碼/* * Client.java * * Created on _DATE_, _TIME_ */package com.client;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;impor

21、t .Socket;import .UnknownHostException;/* * * author _USER_ */public class Client extends javax.swing.JFrame private int port;private String ip;private boolean isVis = false;/* Creates new form Client */public Client() initComponents();/* This method is called from within the constructor to * initia

22、lize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */GEN-BEGIN:initComponents/ <editor-fold defaultstate="collapsed" desc="Generated Code">private void initComponents() jLabel1 = new javax.swing.JLabel()

23、;jLabel2 = new javax.swing.JLabel();jTextField1 = new javax.swing.JTextField();jTextField2 = new javax.swing.JTextField();jButton1 = new javax.swing.JButton();jScrollPane1 = new javax.swing.JScrollPane();jTextArea1 = new javax.swing.JTextArea();setDefaultCloseOperation(javax.swing.WindowConstants.EX

24、IT_ON_CLOSE);jLabel1.setText("u4e3bu673aIPuff1a");jLabel2.setText("u7aefu53e3u53f7uff1a");jButton1.setText("u83b7u53d6");jButton1.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent evt) try jButton1ActionPerforme

25、d(evt); catch (UnknownHostException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace(););jTextArea1.setColumns(20);jTextArea1.setRows(5);jScrollPane1.setViewportView(jTextArea1);javax.swing.GroupLayout layout = new java

26、x.swing.GroupLayout(getContentPane();getContentPane().setLayout(layout);layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)addGroup(layou

27、t.createSequentialGroup()addGap(21, 21,21).addComponent(jLabel1).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(jTextField1,javax.swing.GroupLayout.DEFAULT_SIZE,183,Short.MAX_VALUE)addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) addComponent(jL

28、abel2) addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) addComponent(jTextField2,javax.swing.GroupLayout.PREFERRED_SIZE,37,javax.swing.GroupLayout.PREFERRED_SIZE).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED).addComponent(jButton1).addGroup(layout.createSeq

29、uentialGroup().addGap(35, 35,35).addComponent(jScrollPane1,javax.swing.GroupLayout.PREFERRED_SIZE,364,javax.swing.GroupLayout.PREFERRED_SIZE).addContainerGap();layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGap

30、(32, 32, 32).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel1).addComponent(jButton1).addComponent(jLabel2).addComponent(jTextField1,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE)

31、.addComponent(jTextField2,javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE).addGap(18, 18, 18).addComponent(jScrollPane1,javax.swing.GroupLayout.PREFERRED_SIZE,187,javax.swing.GroupLayout.PREFERRED_SIZE).addContainerGap(38, Short.MAX

32、_VALUE);pack();/ </editor-fold>/GEN-END:initComponentsprivate void jButton1ActionPerformed(java.awt.event.ActionEvent evt) throws UnknownHostException, IOException ip = jTextField1.getText();port = Integer.parseInt(jTextField2.getText();/轉(zhuǎn)換為int型Socket socket = new Socket(ip, port);/創(chuàng)建套接字DataIn

33、putStream dataInputStream = new DataInputStream(socket.getInputStream();/數(shù)據(jù)輸入流DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream();/數(shù)據(jù)輸出流String hostInfo = dataInputStream.readUTF();/獲取服務(wù)器信息jTextArea1.setText(hostInfo);dataInputStream.close();/關(guān)閉輸入流dataOutputStream.close(

34、);/關(guān)閉輸出流socket.close();/* * param args the command line arguments */public static void main(String args) /main方法java.awt.EventQueue.invokeLater(new Runnable() /實(shí)現(xiàn)多線程public void run() new Client().setVisible(true);/設(shè)為可見);/GEN-BEGIN:variables/ Variables declaration - do not modifyprivate javax.swing.J

35、Button jButton1;private javax.swing.JLabel jLabel1;private javax.swing.JLabel jLabel2;private javax.swing.JScrollPane jScrollPane1;private javax.swing.JTextArea jTextArea1;private javax.swing.JTextField jTextField1;private javax.swing.JTextField jTextField2;/ End of variables declaration/GEN-END:var

36、iables(2) 服務(wù)器通信模塊源代碼package com.server;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import .ServerSocket;import .Socket;public class Server private static int port = 20000;public static void main(String args) throws IOException HostInfo hostInfo = new Hos

37、tInfo();StringBuilder stringBuilder = hostInfo.getHostInfo();ServerSocket serverSocket = new ServerSocket(port);/創(chuàng)建套接字System.out.println("Server Start.");while (true) Socket socket = serverSocket.accept();/接收客戶端請求System.out.println("One person was connected.");DataInputStream dat

38、aInputStream = new DataInputStream(socket.getInputStream();DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream();dataOutputStream.writeUTF(stringBuilder.toString();/輸出流向管道寫數(shù)據(jù)dataOutputStream.close();/關(guān)閉輸出流dataInputStream.close();/關(guān)閉輸入流socket.close();/關(guān)閉socket(3) 服務(wù)器采集模塊源代

39、碼package com.server;import .InetAddress;import .NetworkInterface;import java.util.Formatter;import java.util.Locale;import java.util.Map;import java.util.Properties;public class HostInfo public StringBuilder getHostInfo() StringBuilder infoBuilder = new StringBuilder();/* * 獲取主機(jī)名稱、用戶名、域名 */Map<String, String> map = System.getenv();/獲得鍵值對infoBuilder.append(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論