版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 遠(yuǎn)程主機(jī)信息采集工具的設(shè)計(jì)與實(shí)現(xiàn) 遠(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ì)
2、描述了遠(yuǎn)程主機(jī)信息采集工具的設(shè)計(jì)步驟、部分源代碼以及系統(tǒng)測(cè)試結(jié)果;第四節(jié)結(jié)束語以及相關(guān)參考文獻(xiàn)。1.2 設(shè)計(jì)平臺(tái)及設(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)勢(shì)、網(wǎng)絡(luò)安全狀況、用戶行為模式等信息,為網(wǎng)絡(luò)的運(yùn)行和維護(hù)提供了重要依據(jù),由此可見,采集主機(jī)的信息并匯總分析是網(wǎng)絡(luò)管理不可或缺的一部分。因此,遠(yuǎn)程主機(jī)信息采集工具是
3、開發(fā)勢(shì)在必行。遠(yuǎn)程主機(jī)信息采集系統(tǒng)通過對(duì)網(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)聽客戶端請(qǐng)求,客戶端向服務(wù)器請(qǐng)求獲取采集到的信息,服務(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)
4、絡(luò)驅(qū)動(dòng)建立關(guān)系。此后,應(yīng)用程序送給Socket的數(shù)據(jù),由Socket交給網(wǎng)絡(luò)驅(qū)動(dòng)程序向網(wǎng)絡(luò)上發(fā)送出去。計(jì)算機(jī)從網(wǎng)絡(luò)上收到與該Socket綁定IP地址和端口號(hào)相關(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)聽,客戶端請(qǐng)求,連接確認(rèn)。(1)服務(wù)器監(jiān)聽:是服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)。(2)客戶端請(qǐng)求:是指由客戶端的套接字提出連接請(qǐng)求,要連接的目標(biāo)是服
5、務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號(hào),然后就向服務(wù)器端套接字提出連接請(qǐng)求。(3)連接確認(rèn):是指當(dāng)服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請(qǐng)求,它就響應(yīng)客戶端套接字的請(qǐng)求,建立一個(gè)新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,連接就建立好了。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請(qǐng)求。2.2 C/S模式在TCP/IP網(wǎng)絡(luò)應(yīng)用中,通信的兩個(gè)進(jìn)程間相互作用的主要模式是客戶/服務(wù)器(Client/Server, C/S)模式,即客戶向服務(wù)器發(fā)出服務(wù)請(qǐng)求,服務(wù)器接收到請(qǐng)求后,提
6、供相應(yīng)的服務(wù)??蛻?服務(wù)器模式的建立基于以下兩點(diǎn): (1)首先,建立網(wǎng)絡(luò)的起因是網(wǎng)絡(luò)中軟硬件資源、運(yùn)算能力和信息不均等,需要共享,從而造就擁有眾多資源的主機(jī)提供服務(wù),資源較少的客戶請(qǐng)求服務(wù)這一非對(duì)等作用。 (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ù)請(qǐng)求提供相應(yīng)服務(wù): (1)打開一通信通道并告知本地主機(jī),它愿意在某一公認(rèn)地址上的某端口(如FTP的端口可能為21)接收客戶請(qǐng)求; (2)等待客戶
7、請(qǐng)求到達(dá)該端口; (3)接收到客戶端的服務(wù)請(qǐng)求時(shí),處理該請(qǐng)求并發(fā)送應(yīng)答信號(hào)。接收到并發(fā)服務(wù)請(qǐng)求,要激活一新進(jìn)程來處理這個(gè)客戶請(qǐng)求(如UNIX系統(tǒng)中用fork、exec)。新進(jìn)程處理此客戶請(qǐng)求,并不需要對(duì)其它請(qǐng)求作出應(yīng)答。服務(wù)完成后,關(guān)閉此新進(jìn)程與客戶的通信鏈路,并終止。 (4)返回第(2)步,等待另一客戶請(qǐng)求。 (5)關(guān)閉服務(wù)器客戶端: (1)打開一通信通道,并連接到服務(wù)器所在主機(jī)的特定端口; (2)向服務(wù)器發(fā)服務(wù)請(qǐng)求報(bào)文,等待并接收應(yīng)答;繼續(xù)提出請(qǐng)求. (3)請(qǐng)求結(jié)束后關(guān)閉通信通道并終止。2.3 本系統(tǒng)設(shè)計(jì)原理本系統(tǒng)能夠?qū)崿F(xiàn)對(duì)指定IP主機(jī)信息采集功能。系統(tǒng)分為服務(wù)器端和客戶端,服務(wù)器端運(yùn)行在
8、需要盡心信息采集的主機(jī)上,客戶端運(yùn)行在用戶主機(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ā)出請(qǐng)求,通過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)建輸入流,用來接收存儲(chǔ)遠(yuǎn)程主機(jī)發(fā)送的主機(jī)信息。然后把從遠(yuǎn)
9、程主機(jī)采集過來的信息顯示出來。程序流程圖如圖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ù)器請(qǐng)求主機(jī)信息,
10、獲取信息后關(guān)閉套接字。具體代碼如下: 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 DataInput
11、Stream(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();/關(guān)閉輸出流socket.close();3.2.2 服務(wù)器端模塊服務(wù)器分為通
12、信模塊和信息采集模塊。通信模塊與客戶端通信模塊一樣。信息采集模塊實(shí)現(xiàn)了對(duì)主機(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 S
13、tringBuilder();/* * 獲取主機(jī)名稱、用戶名、域名 */Map<String, String> map = System.getenv();/獲得鍵值對(duì)infoBuilder.append("n主機(jī)用戶名:" + map.get("USERNAME");/ 獲取用戶名infoBuilder.append("n主機(jī)名稱:" +map.get("COMPUTERNAME");/ 獲取計(jì)算機(jī)名infoBuilder.append("n主機(jī)域名:" + map.get(&qu
14、ot;USERDOMAIN") + "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().toStri
15、ng(); / 獲取主機(jī)ipbyte 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) ? "-" : ""
16、).toString();/Mac地址格式轉(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.getP
17、roperty("");infoBuilder.append("n操作系統(tǒng)的構(gòu)架:" + props.getProperty("os.arch");infoBuilder.append("n操作系統(tǒng)的版本:" + props.getProperty("os.version");return infoBuilder;3.3 測(cè)試結(jié)果此次測(cè)試以本機(jī)作為測(cè)試對(duì)象,首先運(yùn)行服務(wù)器端,進(jìn)行信息采集,運(yùn)行結(jié)果如圖3.3所示。 圖3.3 服務(wù)器運(yùn)行截圖當(dāng)用戶在客戶端輸入指定IP,本測(cè)試使用本地主
18、機(jī)作為測(cè)試,輸入,點(diǎn)擊獲取,采集的主機(jī)信息以列表的形式顯示文本框中。測(cè)試結(jié)果如圖3.4所示。 圖3.4 主機(jī)信息采集測(cè)試截圖4 結(jié)束語本次課程設(shè)計(jì)的課題是設(shè)計(jì)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的端口掃描工具,此次課程設(shè)計(jì)程序在MyEclipse軟件中使用java編寫,該工具可采集指定IP的遠(yuǎn)程主機(jī)的基本信息,并以本地主機(jī)作為測(cè)試。經(jīng)過這兩個(gè)星期的課程設(shè)計(jì),通過圖書館和網(wǎng)上查找資料,順利完成了設(shè)計(jì)和開發(fā),遠(yuǎn)程筑基信息采集工具開發(fā)完畢。在整個(gè)設(shè)計(jì)過程中,出現(xiàn)過很多的問題,得到了老師和同學(xué)的幫助,在不斷學(xué)習(xí)的過程中我體會(huì)到這次課程設(shè)計(jì)是一個(gè)不斷學(xué)習(xí)的過程,從設(shè)計(jì)初的模糊認(rèn)識(shí)到最后能夠順利完成,我體會(huì)到在
19、實(shí)踐中學(xué)習(xí)的重要性。設(shè)計(jì)過程中,由于要實(shí)現(xiàn)某些功能,網(wǎng)上資源解決了我的問題。多借鑒網(wǎng)絡(luò)資源也是一種很好的學(xué)習(xí)方法總之,通過這次課程設(shè)計(jì),我深刻體會(huì)到要做好一個(gè)完整的系統(tǒng),需要有系統(tǒng)的思維方式和方法,對(duì)待一個(gè)新的問題,要耐心、要善于運(yùn)用已有的資源來充實(shí)自己。同時(shí)我也深刻的認(rèn)識(shí)到,在對(duì)待一個(gè)新事物時(shí),一定要從整體考慮,完成一步之后再作下一步,這樣對(duì)于系統(tǒng)而言才能更加有效。參考文獻(xiàn)1 孫鐘秀, 費(fèi)翔林, 駱斌. 操作系統(tǒng)教程(第4版) M. 北京: 高等教育出版社, 20082 Y. Daniel Liang . Java語言程序設(shè)計(jì)基礎(chǔ)篇. 北京:機(jī)械工業(yè)出版社,20113 范建華、胥光輝、張濤
20、等譯TCP/IP詳解 卷1:協(xié)議機(jī)械工業(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.
21、IOException;import .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 constr
22、uctor to * initialize 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 jav
23、ax.swing.JLabel();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.W
24、indowConstants.EXIT_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 jButt
25、on1ActionPerformed(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
26、layout = new javax.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.LEADI
27、NG)addGroup(layout.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
28、) addComponent(jLabel2) 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
29、(layout.createSequentialGroup().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.createSequent
30、ialGroup().addGap(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.GroupLayou
31、t.PREFERRED_SIZE).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).addContainer
32、Gap(38, Short.MAX_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, p
33、ort);/創(chuàng)建套接字DataInputStream 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)閉輸入流dataOu
34、tputStream.close();/關(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 modifypriv
35、ate javax.swing.JButton 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 declar
36、ation/GEN-END:variables(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 h
37、ostInfo = new HostInfo();StringBuilder stringBuilder = hostInfo.getHostInfo();ServerSocket serverSocket = new ServerSocket(port);/創(chuàng)建套接字System.out.println("Server Start.");while (true) Socket socket = serverSocket.accept();/接收客戶端請(qǐng)求System.out.println("One person was connected.");Da
38、taInputStream dataInputStream = 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)閉so
39、cket(3) 服務(wù)器采集模塊源代碼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();/獲得鍵值對(duì)infoBuilder.append("n主
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版小額貸款抵押合同資產(chǎn)評(píng)估及報(bào)告協(xié)議2篇
- 2025年度個(gè)人與公司租賃房屋修繕責(zé)任合同4篇
- 2025年度個(gè)人旅游規(guī)劃與導(dǎo)游服務(wù)合同2篇
- 2025版室外照明燈具廣告宣傳與品牌推廣合同3篇
- 2025年度煤炭行業(yè)綠色運(yùn)輸體系構(gòu)建合同4篇
- 2025標(biāo)準(zhǔn)新能源材料研發(fā)與采購合作協(xié)議3篇
- 2025年度生態(tài)環(huán)保瓷磚批量采購合作協(xié)議3篇
- 2025版醫(yī)療健康大數(shù)據(jù)合作開發(fā)合同3篇
- 個(gè)性化定制小區(qū)房產(chǎn)買賣合同(2024版)版B版
- 2025版國際貿(mào)易糾紛訴訟擔(dān)保委托服務(wù)協(xié)議3篇
- 五年級(jí)上冊(cè)寒假作業(yè)答案(人教版)
- 2025年山東浪潮集團(tuán)限公司招聘25人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2024年財(cái)政部會(huì)計(jì)法律法規(guī)答題活動(dòng)題目及答案一
- 2025年江西省港口集團(tuán)招聘筆試參考題庫含答案解析
- (2024年)中國傳統(tǒng)文化介紹課件
- 液化氣安全檢查及整改方案
- 《冠心病》課件(完整版)
- 2024年云網(wǎng)安全應(yīng)知應(yīng)會(huì)考試題庫
- 公園保潔服務(wù)投標(biāo)方案
- 光伏電站項(xiàng)目合作開發(fā)合同協(xié)議書三方版
- 2024年秋季新滬教版九年級(jí)上冊(cè)化學(xué)課件 第2章 空氣與水資源第1節(jié) 空氣的組成
評(píng)論
0/150
提交評(píng)論