




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上山東科技大學(xué) 操作系統(tǒng)課程設(shè)計李貞良專業(yè)名稱:_軟件工程_班 級:_10級三班_學(xué) 號: 8_信息科學(xué)與工程學(xué)院二零一三年一月目 錄多線程端口掃描器1 設(shè)計任務(wù)與要求加深對Java面向?qū)ο蟪绦蛟O(shè)計課程所學(xué)知識的理解,進(jìn)一步鞏固 Java語言的語法規(guī)則。分析系統(tǒng)的可行性,讓系統(tǒng)有一個明確的方向,使開發(fā)更具合理性,并能分析出系統(tǒng)的具體流程,為后面的開發(fā)做好鋪墊。明確本次課程設(shè)計所要用到的技術(shù)點并到網(wǎng)上搜索以及查閱相關(guān)的書籍來搜集資料。通過編寫一個基于Java的應(yīng)用系統(tǒng)綜合實例,來掌握J(rèn)ava語言編程技巧。并學(xué)會編制結(jié)構(gòu)清晰、風(fēng)格良好的Java語言程序,從而具備解決綜合性實
2、際問題的能力,學(xué)會使用Java編程工具,如EditPlus,Eclipse等。2 系統(tǒng)功能描述2.1 功能概述多線程端口掃描器是實現(xiàn)計算機(jī)的端口的掃描,只要在在前臺設(shè)置好所要掃描的IP、起始端口、結(jié)束端口以及所要用到的線程數(shù),點擊掃描,就可以掃描到所輸入IP地址主機(jī)的開放端口,并顯示在主窗體中;點擊退出,則可以退出該程序。IP設(shè)置應(yīng)為所在主機(jī)的IP地址,起始端口和結(jié)束端口應(yīng)為065535之間的一個數(shù),且起始端口應(yīng)小于結(jié)束端口的大小。線程數(shù)為0200之間的一個數(shù)。點擊開始后就會運(yùn)行,直到掃描完畢顯示出開放端口,如果沒有開放端口,則只顯示掃描完畢。2.2 本系統(tǒng)要實現(xiàn)的功能 端口掃描功能:掃描開放
3、的端口,并將掃描到的開放端口號送到前臺。 圖像顯示功能:顯示界面圖形。 多線程功能:當(dāng)客戶端要求與服務(wù)器端建立連接時,服務(wù)器端就將用到多線程功能,為每一個建立起來的連接創(chuàng)建一個線程。 異常拋出功能:對于明顯的錯誤,能提示出錯誤的類型并結(jié)束程序的運(yùn)行。3 系統(tǒng)總體設(shè)計3.1 總體分析本程序分為前后臺系統(tǒng),后臺系統(tǒng)用于掃描主機(jī)開放端口,并把節(jié)掃描的數(shù)據(jù)送至前臺窗口顯示;前臺要顯示掃描的結(jié)果,所以應(yīng)為一個窗口,這個窗口應(yīng)能夠設(shè)置主機(jī)的IP地址,設(shè)置端口的開始端口、結(jié)束端口和線程數(shù),并且還能夠顯示掃描的狀態(tài)。在中央是顯示結(jié)果的窗體。本程序還應(yīng)能夠有控制掃描的狀態(tài)命令,附加設(shè)置最小化和關(guān)閉按鈕。3.2
4、界面設(shè)置構(gòu)思圖圖1 系統(tǒng)構(gòu)思圖3.3 界面使用設(shè)置構(gòu)思當(dāng)出現(xiàn)如圖所示的界面時,填寫好要掃描的IP地址,需要掃描的端口范圍和線程數(shù),單擊命令提示按鈕就可以開始掃描,掃描結(jié)果就會顯示在中間的掃描結(jié)果顯示區(qū)域,在掃描狀態(tài)顯示區(qū)就會顯示是否掃描完畢。流程圖如下:界面出現(xiàn)填寫IP地址或者用默認(rèn)的IP設(shè)置掃描需要的線程數(shù)或者是用默認(rèn)的線程數(shù)單擊命令按鈕開始掃描掃描結(jié)束,顯示結(jié)果顯示在結(jié)果顯示區(qū)域是否繼續(xù)退出結(jié)束否是圖2 系統(tǒng)構(gòu)思流程圖3.4 后臺設(shè)計構(gòu)思后臺系統(tǒng)使用Scanner和Scan類,創(chuàng)建前臺布局和創(chuàng)建掃描端口、事件處理,并且能對簡單的錯誤進(jìn)行判斷,顯示錯誤原因。調(diào)用數(shù)據(jù)處理包,處理異常情況;調(diào)用
5、皮膚包,美化顯示窗口。4 系統(tǒng)詳細(xì)設(shè)計4.1 界面設(shè)計本程序界面圖形設(shè)計要能清楚顯示掃描后的結(jié)果,并且能很好的體現(xiàn)出界面的整潔大方,但并不失去吸引人眼球的畫面,所以在做界面的時候考慮了界面的色彩,并且添加了皮膚,界面上面的字體設(shè)置和windows窗口設(shè)置一樣采用宋體,界面上的按鈕不設(shè)置過多的按鈕,僅設(shè)置有必要的按鈕即可,界面設(shè)置大方。使用的時候有默認(rèn)的IP地址、需要掃描的端口和線程數(shù),如果需要掃描其他主機(jī),只需要填寫好要掃描的主機(jī)的IP地址,需要掃描的端口范圍和線程數(shù),單擊命令提示按鈕就可以開始掃描,掃描結(jié)果就會顯示在中間的掃描結(jié)果顯示區(qū)域,在掃描狀態(tài)顯示區(qū)就會顯示是否掃描完畢。4.2 界面設(shè)
6、計圖本程序采用小窗口形式,外圍大小為170mm*90mm,字體采用宋體五號,結(jié)果顯示區(qū)域框架大小為160mm*45mm,底色為粉紅,結(jié)果顯示字幕為主機(jī)地址加開放端口。添加個性皮膚。其余地方設(shè)置按鈕和掃描的主機(jī)地址、端口和線程數(shù)。設(shè)計的預(yù)計頁面圖形如圖:添加個性皮膚顯示粉紅底色圖3 系統(tǒng)界面設(shè)計圖4.3 后臺設(shè)計本程序使用了為主要的Scanner類和Scan類。Scan類的作用是創(chuàng)建線程掃描端口,然后把結(jié)果顯示到前臺。Scanner類的作用是構(gòu)造前臺布局,調(diào)用Scan類添加事件處理,對輸入進(jìn)行錯誤判斷,如果輸入不在允許的范圍之內(nèi)則顯示相關(guān)錯誤。在本程序中用到了網(wǎng)絡(luò)編程的兩個類,下面介紹這兩個類的
7、常用方法。InetSocketAddress類構(gòu)造方法如下:l InetSocketAddress(InetAddress addr, int port):根據(jù) IP 地址和端口號創(chuàng)建套接字地址。l InetSocketAddress(int port):創(chuàng)建套接字地址,其中 IP 地址為通配符地址,端口號為指定值。l InetSocketAddress(String hostname, int port):根據(jù)主機(jī)名和端口號創(chuàng)建套接字地址。Socket類常用方法如下:l Socket():通過系統(tǒng)默認(rèn)類型的 SocketImpl 創(chuàng)建未連接套接字 l Socket(InetAddress a
8、ddress, int port):創(chuàng)建一個流套接字并將其連接到指定 IP 地址的指定端口號。l void bind(SocketAddress bindpoint):將套接字綁定到本地地址。l void close():關(guān)閉此套接字。l void connect(SocketAddress endpoint):將此套接字連接到服務(wù)器。l void connect(SocketAddress endpoint, int timeout):將此套接字連接到具有指定超時值的服務(wù)器。l boolean isClosed():返回套接字的關(guān)閉狀態(tài)。l boolean isConnected():返回套
9、接字的連接狀態(tài)。本程序還調(diào)用其他的一些類和包,比如軟件包 java.awt.color 、java.awt.event、io.IOException、Javax.Swing、jvnet.substance.*。l java.awt.color包的的描述:提供用于顏色空間的類。它包含了基于國際色彩聯(lián)盟 (ICC) 配置文件格式規(guī)范的顏色空間實現(xiàn)。它還包含了基于 ICC 配置文件格式規(guī)范的顏色配置文件。用來使界面更加具有色彩。Result.setBackground(Color.PINK);/設(shè)置窗口為粉紅l java.awt.event 的描述:提供處理由 AWT 組件所激發(fā)的各類事件的接口和類
10、。事件由事件源所激發(fā),向事件源注冊的事件偵聽器可接收有關(guān)特定事件類型的通知。此包定義了事件和事件偵聽器,以及事件偵聽器適配器,它是讓事件偵聽器的編寫過程更為輕松的便捷類。在本程序中使用:public void actionPerformed(ActionEvent e) String cmd = e.getActionCommand();if(cmd.equals("Start")l io.IOException包的描述:用來處理io的錯誤,不僅僅是文件讀寫,還包括很多stream的讀寫,而且throws是用來放在函數(shù)定義的函數(shù)體前函數(shù)名后的,表示這個函數(shù)將會在出現(xiàn)異常的書
11、后會拋出io異常,所以在以后的程序中調(diào)用這個函數(shù)的時候就必須用try和catch來捕獲異常,否則編譯會報錯,這主要涉及到j(luò)ava的安全機(jī)制。本程序中使用如下:try minPort = Integer.parseInt(PortStart.getText();maxPort = Integer.parseInt(PortEnd.getText();threadNum = Integer.parseInt(ThreadNum.getText(); catch (NumberFormatException e1) DLGError.setBounds(300, 280, 299, 120);DLG
12、INFO.setText("錯誤的端口號或線程數(shù)!端口號和線程數(shù)必須為整數(shù)!");DLGINFO.setBounds(10, 20, 280, 20);OK.setBounds(110, 50, 60, 30);DLGError.setVisible(true);return;l Javax.Swing集合描述:由所有Java圖形用戶界面(GUI)組件所構(gòu)成,可運(yùn)行在任一支持Java虛擬機(jī)(JVM)的本地平臺上。由于這些組件全都是用Java語言編寫的,因此它們可以提供比本地平臺GUI組件更多的功能。(與抽象窗口工具箱對比)。Java Swing是Java Foundatio
13、n Classes(JFC)的一部分。在Swing中,Sun開發(fā)了一個經(jīng)過仔細(xì)設(shè)計的、靈活而強(qiáng)大的 GUI 工具包。Swing是在AWT組件基礎(chǔ)上構(gòu)建的。它所提供的功能要比AWT提供的更為廣泛。它也是Java技術(shù)的一種標(biāo)準(zhǔn)配置。Swing模型一個Java GUI通常由頂層容器、中間容器以及多個原子組件組成。每個原子組件或容器都可能觸發(fā)相應(yīng)事件的產(chǎn)生。容器是一類能夠在其中容納其他組件的特殊組件。Swing的GUI組件類是按照類屬層次以樹狀結(jié)構(gòu)進(jìn)行組織的。在這個樹的最頂層,即樹的根部,使一個最基本的容器類,被稱為頂層容器。Swing 提供了三個通用的頂層容器類JFrame,JDialog和JApp
14、let。JFrame提供了基于窗體的應(yīng)用程序,JDialog提供對話框形式的界面,JApplet提供Java小應(yīng)用程序的界面形式。在頂層容器下是中間容器,用于容納其他的組件。通常窗格本身在顯示界面中是看不到的。面板類Panel是一種中間容器,它的唯一作用是使組件更容易定位。頂層容器通過getContentPane()方法獲取內(nèi)部的一個內(nèi)容窗格。Swing包的組成:l javax.swing:基本Swing包,包括Swing容器、組件及相關(guān)設(shè)置的類和接口。l javax.swing.border:包括與邊界設(shè)計相關(guān)的類和接口。l javax.swing.colorchooser:與顏色選擇相關(guān)的
15、類和接口。l javax.swing.event:包括事件處理相關(guān)的類和接口。l javax.swing.filechooser:包括對文件進(jìn)行查看選取的相關(guān)類。l javax.swing.plaf:包括一些對外觀樣式操作的類和接口。l javax.swing.tree:包括對樹形組件進(jìn)行操作的類和接口。常用Swing組件:l 按鈕:JButtonl 文本區(qū):JTextAreal 文本字段:JTextField在本程序中使用如下:/ 設(shè)置主窗體位置和大小mainFrame.setBounds(180, 200, 550, 300);mainFrame.addWindowListener(new
16、 WindowAdapter()public void windowClosing(WindowEvent e)System.exit(0);/ 設(shè)置掃描按鈕和退出按鈕Start.setBounds(405, 232, 60, 30);Start.setActionCommand("Start");Start.addActionListener(this);Exit.setBounds(475, 232, 60, 30);Exit.setActionCommand("Exit");Exit.addActionListener(this);l jvnet.
17、substance.*:目的是提供一個流行的外觀(look & feel)。/設(shè)置窗體皮膚SubstanceAutumnLookAndFeel.setSkin(new FieldOfWheatSkin();5 實現(xiàn)與測試5.1 運(yùn)行要求與環(huán)境(1)性能要求實時性好、可靠性強(qiáng)、不占用系統(tǒng)太多的內(nèi)存和存儲空間。(2)設(shè)計約束開發(fā)工具:J2SDK 1.6.0 Eclipse運(yùn)行環(huán)境:Windows 2000以上能實現(xiàn)用戶所定義的各項需求。5.2 運(yùn)行程序流程圖在Eclipse中右擊,選擇運(yùn)行方式,JAVA應(yīng)用程序填寫IP地址,可填寫任意的一個IP出現(xiàn)程序界面設(shè)置開始端口大小,設(shè)置065535
18、之間的端口號且必須為整數(shù)設(shè)置結(jié)束口,設(shè)置065535之間的端口號且必須為整數(shù),并且大于開始端口設(shè)置進(jìn)程數(shù),0200之間且必須為整數(shù)點擊掃描可以開始掃描結(jié)果顯示是否繼續(xù)掃描結(jié)束程序否,點擊退出是,重新設(shè)置圖4 流程圖5.3 運(yùn)行界面圖5 運(yùn)行界面圖未掃描狀態(tài)圖6 運(yùn)行界面未掃描狀態(tài)圖正常掃描后狀態(tài)圖7 運(yùn)行界面正常掃描狀態(tài)圖起始端口設(shè)置有誤掃描開始后狀態(tài)報錯圖8 運(yùn)行界面起始端口設(shè)置錯誤報錯圖圖9 運(yùn)行界面起始端口設(shè)置錯誤報錯圖結(jié)束端口設(shè)置有誤掃描開始后狀態(tài)報錯圖10 運(yùn)行界面結(jié)束端口設(shè)置錯誤報錯圖線程數(shù)設(shè)置錯誤報錯圖11 運(yùn)行界面線程數(shù)設(shè)置錯誤報錯圖6 設(shè)計總結(jié)在此次課程設(shè)計中,遇到了一些問題
19、,如:程序功能不能完全實現(xiàn),對于面向?qū)ο蟮姆椒私獠粔蛲笍?,運(yùn)用到實際的軟件開發(fā)中存在著困難;對于Java語言,以前只學(xué)習(xí)到了一些最基本的知識,要在短時間內(nèi)用Java語言來開發(fā)軟件是一個較大的挑戰(zhàn);對于開發(fā)軟件的流程不熟悉,適應(yīng)起來比較慢,編寫需求說明書和設(shè)計規(guī)格說明書時,自己感覺難以動手,這表明所學(xué)的知識不能靈活運(yùn)用到實際中。對于以上的問題,自己有清楚的認(rèn)識,解決辦法是需要大量閱讀相關(guān)的書籍,多看些項目的源代碼。對于書上以及網(wǎng)站上下載的資料中的Java實例必須理解,還有多跟精通JAVA語言的老師和同學(xué)請教和交流,取其精華。對于實際動手能力與軟件開發(fā)的流程的適應(yīng),必須多進(jìn)行實際的練習(xí)與操作,才
20、能有所進(jìn)步。我自己感覺此次課程設(shè)計做得挺成功的,通過這一次實踐編程,我學(xué)到了不少有關(guān)JAVA的實際編程的知識。在這次設(shè)計開始的第一天開始,我就開始著手修改一個用JAVA編寫的短線呈端口掃描的程序。我剛開始很自信自己能修改成功,但這一過程太不順利。用了兩天時間來修改那個JAVA程序,但調(diào)試的時候都沒有成功。后來我請教一個班上成績好的同學(xué),在他的幫助下我不斷的發(fā)現(xiàn)錯誤,并改正它們,功夫不負(fù)有心人人,我的程序最后運(yùn)行成功了。在這課程設(shè)計期間我的同學(xué)和老師幫助了我,有些東西是我們一起探討,一起解決方法的。當(dāng)然在學(xué)習(xí)Java和設(shè)計程序的過程中還得到了杭志老師的辛勤指導(dǎo),為我解答了不少的疑問。同時,在劉老
21、師身上我們學(xué)到了很多實用的東西,在此表示衷心的感謝!同時,還要感謝幫助過我的其他同學(xué)!這次課程設(shè)計令我感受很多。從拿到題目到改編JAVA程序;然后請教別人慢慢研究琢磨;從理論到實踐;從失敗到成功;忘不了我坐在電腦前苦苦思索,高溫下熬夜地編程的疲憊;忘不了因沉迷于編程卻耽誤了吃飯時間而挨餓辛酸;忘不了這其中了不少的東西,磨礪了我的意志;同時還鞏固了以前所學(xué)的知識,學(xué)到了不少書本上沒有的知識;學(xué)到了很多java編程知識,并學(xué)會了簡單的使用eclipse來開發(fā)java程序的一些使用技巧這次課程設(shè)計是對我本學(xué)期所學(xué)的知識的檢驗,由此我發(fā)現(xiàn)了不少的問題??梢哉f它給了我一次自我評估的機(jī)會。通過設(shè)計讓我知道
22、了那些方面我還是有欠缺的,促使我花時間彌補(bǔ)。臨近考試,時間太緊迫,致使程序?qū)崿F(xiàn)的功能在方法上也許不是很完美,但我以后會多向老師請教,自己也要加強(qiáng)對Java 的學(xué)習(xí)。努力進(jìn)一步提高自己的編程水平。此次的課程設(shè)計,對我來說撰寫文檔似乎是一個更大的挑戰(zhàn)。撰寫文檔不僅要求我們要對自己程序非常熟悉:程序的總體框架,功能,如何實現(xiàn),存在什么問題等,同時還要求我們有清晰的思維和準(zhǔn)確的表達(dá)能力以及嚴(yán)密的邏輯性。因此,寫完這篇文檔對于我們自身來說自然是獲益匪淺的。參考文獻(xiàn)1 Sharon Zakhour Scott Hommel等著. Java 語言導(dǎo)學(xué).人民郵電出版社, 20082 耿祥義 編著. Java基
23、礎(chǔ)教程. 清華大學(xué)出版社, 20043 Joe Wigglesworth Paula Lumby. Java程序設(shè)計高級主題. 北京大學(xué)出版社, 20044 Y.Daniel Liang著,王鎂等譯.Java語言程序設(shè)計基礎(chǔ)篇.20065 朱福喜等.Java項目設(shè)計與開發(fā)范例.電子工業(yè)出版社,2005附件/*基于多線程端口掃描程序源代碼*/import java.awt.Color;/類的調(diào)用import java.awt.Container;import java.awt.Label;import java.awt.TextArea;import java.awt.event.ActionE
24、vent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.IOException;import .InetAddress;import .InetSocketAddress;import .Socket;import .SocketAddress;import .UnknownHostException;import javax.swing.JButton;import javax.swing.JDi
25、alog;import javax.swing.JFrame;import javax.swing.JTextField;import org.jvnet.substance.skin.*;import org.jvnet.substance.skin.SubstanceAutumnLookAndFeel;public class Scanner implements ActionListener/ 創(chuàng)建主窗口public static JFrame mainFrame = new JFrame();public static Label labelIP = new Label("主
26、機(jī)IP");public static Label labelPortStart = new Label("起始端口:");public static Label labelPortEnd = new Label("結(jié)束端口:");public static Label labelThread = new Label("線程數(shù):");public static Label labelResult = new Label("掃描結(jié)果:");public static Label State = new La
27、bel("掃描狀態(tài):");public static Label Scanning = new Label("未開始掃描");public static JTextField hostName = new JTextField("172.22.65.10");public static JTextField PortStart = new JTextField("0");public static JTextField PortEnd = new JTextField("100");public
28、 static JTextField ThreadNum = new JTextField("10");/ 文本區(qū)域,顯示掃描結(jié)果public static TextArea Result = new TextArea();public static Label DLGINFO = new Label("");public static JButton Start = new JButton("掃描");public static JButton Exit = new JButton("退出");/ 錯誤提示對話框
29、public static JDialog DLGError = new JDialog(mainFrame, "錯誤");public static JButton OK = new JButton("確定");public Scanner()/設(shè)置窗體皮膚 SubstanceAutumnLookAndFeel.setSkin(new FieldOfWheatSkin();/ 設(shè)置主窗體名稱mainFrame.setTitle("多線程端口掃描器/吳虎");/ 設(shè)置主窗體位置和大小mainFrame.setBounds(180, 2
30、00, 550, 300);mainFrame.addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)System.exit(0););/ 設(shè)置錯誤提示框Container dPanel = DLGError.getContentPane();dPanel.setLayout(null);dPanel.add(DLGINFO);dPanel.add(OK);OK.setActionCommand("ok");OK.addActionListener(this);/ 在主窗體中
31、添加其他組件mainFrame.setLayout(null);mainFrame.setResizable(false);mainFrame.add(Start);mainFrame.add(Exit);mainFrame.add(labelIP);mainFrame.add(hostName);mainFrame.add(labelPortStart);mainFrame.add(labelPortEnd);mainFrame.add(PortStart);mainFrame.add(PortEnd);mainFrame.add(labelThread);mainFrame.add(Thr
32、eadNum);mainFrame.add(labelResult);mainFrame.add(Result);mainFrame.add(State);mainFrame.add(Scanning);/ 設(shè)置掃描按鈕和退出按鈕Start.setBounds(405, 232, 60, 30);Start.setActionCommand("Start");Start.addActionListener(this);Exit.setBounds(475, 232, 60, 30);Exit.setActionCommand("Exit");Exit.a
33、ddActionListener(this);labelIP.setBounds(17, 13, 50, 20);hostName.setBounds(67, 10, 92, 25);hostName.setHorizontalAlignment(JTextField.CENTER);labelPortStart.setBounds(162, 13, 60, 20);PortStart.setBounds(227, 10, 45, 25);PortStart.setHorizontalAlignment(JTextField.CENTER);labelPortEnd.setBounds(292
34、, 13, 60, 20);PortEnd.setBounds(357, 10, 45, 25);PortEnd.setHorizontalAlignment(JTextField.CENTER);labelThread.setBounds(422, 13, 50, 20);ThreadNum.setBounds(477, 10, 45, 25);ThreadNum.setHorizontalAlignment(JTextField.CENTER);labelResult.setBounds(1, 45, 55, 20);Result.setBounds(1, 65, 542, 160);Re
35、sult.setEditable(false);Result.setBackground(Color.PINK);/設(shè)置窗口為粉紅State.setBounds(17, 232, 60, 30);Scanning.setBounds(80, 232, 120, 30);mainFrame.setVisible(true);public void actionPerformed(ActionEvent e) String cmd = e.getActionCommand(); /得到明明處理事件if(cmd.equals("Start")try Scan.hostAddres
36、s = InetAddress.getByName(Scanner.hostName.getText(); catch (UnknownHostException e1) DLGError.setBounds(300, 280, 160, 110);DLGINFO.setText("錯誤的IP地址/域名");DLGINFO.setBounds(25, 15, 100, 20);OK.setBounds(45, 40, 60, 30);DLGError.setVisible(true);return ;int minPort ;int maxPort ;int threadN
37、um ;/ 獲取輸入數(shù)據(jù)try minPort = Integer.parseInt(PortStart.getText();maxPort = Integer.parseInt(PortEnd.getText();threadNum = Integer.parseInt(ThreadNum.getText(); catch (NumberFormatException e1) DLGError.setBounds(300, 280, 299, 120);DLGINFO.setText("錯誤的端口號或線程數(shù)!端口號和線程數(shù)必須為整數(shù)!");DLGINFO.setBound
38、s(10, 20, 280, 20);OK.setBounds(110, 50, 60, 30);DLGError.setVisible(true);return;/ 輸入信息錯誤處理if(minPort < 0)|(maxPort > 65535)|(minPort > maxPort)DLGError.setBounds(300, 280, 295, 120);DLGINFO.setText("最小端口必須是0-65535并且小于最大端口的整數(shù)");DLGINFO.setBounds(10, 20, 280, 20);OK.setBounds(120,
39、 50, 60, 30);DLGError.setVisible(true);return ;if(threadNum > 200)| (threadNum < 0)DLGError.setBounds(300, 280, 184, 120);DLGINFO.setText("進(jìn)程數(shù)必須是1-200中的整數(shù)");DLGINFO.setBounds(10, 20, 200, 20);OK.setBounds(55, 50, 60, 30);DLGError.setVisible(true);return ;Result.append("正在掃描 &quo
40、t; + hostName.getText() + " 線程數(shù):"+threadNum+"n");Scanning.setText("開始掃描 .");Result.append("開始端口 " + minPort + " 結(jié)束端口 " + maxPort + " n");for(int i = minPort;i <= maxPort; ) if(i + threadNum) <= maxPort) new Scan(i, i + threadNum).star
41、t();i += threadNum;else new Scan(i, maxPort).start();i += threadNum;try Thread.sleep(3000);/設(shè)置處理等待時間 catch (InterruptedException e1) e1.printStackTrace();Result.append("掃描完成!n");Scanning.setText("掃描完成!");else if(cmd.equals("ok")DLGError.dispose();else if(cmd.equals("Exit")System.exit(1);public static void main(String args) new Scanner();class Scan extends Threadint maxPort, minPort;public static
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 營養(yǎng)科學(xué)技術(shù)的研究和發(fā)展考核試卷
- 潛水裝備在海洋環(huán)境保護(hù)法規(guī)遵守考核試卷
- 碩士學(xué)習(xí)精要
- 吉林省松原市乾安縣七中2025屆高三第五次適應(yīng)性訓(xùn)練歷史試題含解析
- 武漢工程大學(xué)《生物制藥工藝學(xué)實驗一》2023-2024學(xué)年第二學(xué)期期末試卷
- 內(nèi)蒙古鴻德文理學(xué)院《新興時代下的公共政策》2023-2024學(xué)年第二學(xué)期期末試卷
- 遼寧省大連市莊河高級中學(xué)2025年高三畢業(yè)班下學(xué)期摸底聯(lián)考?xì)v史試題試卷含解析
- 山東城市服務(wù)職業(yè)學(xué)院《環(huán)境藝術(shù)設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 江西工程學(xué)院《數(shù)字音頻技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 吉林省長春市第二實驗學(xué)校2025年初三五月適應(yīng)性考試英語試題文試卷含答案
- 臨時聘用司機(jī)合同范本
- ipo上市商業(yè)計劃書
- 抖音短陪跑合同范本
- HJ 636-2012 水質(zhì) 總氮的測定 堿性過硫酸鉀消解紫外分光光度法
- 山東省青島市市北區(qū)2023-2024學(xué)年七年級下學(xué)期英語期末考試試題
- 現(xiàn)代風(fēng)險導(dǎo)向?qū)徲嬙谔旌鈺嫀熓聞?wù)所的應(yīng)用研究
- 拔牙技巧必成高手
- 新生兒科科室發(fā)展規(guī)劃方案
- 投標(biāo)項目實施方案服務(wù)響應(yīng)方案
- (高清版)DZT 0285-2015 礦山帷幕注漿規(guī)范
- 《養(yǎng)老護(hù)理員》-課件:老年人安全防范及相關(guān)知識
評論
0/150
提交評論