

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 成人高等教育畢業(yè)設計(論文)</p><p> 題 目 局域網(wǎng)聊天軟件 </p><p> 專 業(yè) 計算機網(wǎng)絡應用專業(yè) </p><p> 班 級 </p><p> 2013
2、 年</p><p><b> 摘 要</b></p><p> 隨著計算機網(wǎng)絡技術的發(fā)展,各種各樣基于網(wǎng)絡的應用也隨之誕生,比如基于互聯(lián)網(wǎng)的信息發(fā)布,通信,數(shù)據(jù)共享等等。局域網(wǎng)的發(fā)展也同樣迅速。很多政府機構,企業(yè),學校,都是先以一個統(tǒng)一的局域網(wǎng)聯(lián)結在一起,再分別接入INTERNET.因此基于局域網(wǎng)的即時通信工具,就這樣應運而生了。所以本文提出了一個更加合
3、理的設計,并在WINDOWS平臺上加以了實現(xiàn).在本實現(xiàn)內(nèi)將客戶端和服務端綜合在一個程序之內(nèi),用多線程實現(xiàn)不同的并行任務。并進行了人性化的界面設計,使用起來更加簡單方便,并且功能十分合理,又易于擴展以及個性化定制。</p><p> 在實際的網(wǎng)絡環(huán)境里,同一時間只對一個用戶服務是不可行的。一個優(yōu)秀的網(wǎng)絡服務程序除了能處理用戶的輸入信息,還必須能夠同時響應多個客戶端的連接請求。在Java中,實現(xiàn)以上功能特點是非常容
4、易的。</p><p><b> 設計原理: </b></p><p> 現(xiàn)代互聯(lián)網(wǎng)不僅能給用戶提供諸如搜索和電子郵箱等傳統(tǒng)的信息服務,而且對實時通信功能也有較好的支持。常見的實時通信軟件都是基于C/S框架,要求客戶端在通信前先聯(lián)入服務器,才能和其他的聯(lián)入服務器的用戶進行通信。而點對點的通信則無需使用服務器,對個客戶端可以直接互相通信,使用更為方便。</p&
5、gt;<p> 主程序監(jiān)聽一端口,等待客戶接入;同時構造一個線程類,準備接管會話。當一個Socket會話產(chǎn)生后,將這個會話交給線程處理,然后主程序繼續(xù)監(jiān)聽。運用Thread類或Runnable接口來實現(xiàn)是不錯的辦法。</p><p> 關鍵詞:局域網(wǎng);即時通信;客戶端;ServerSocket類;多線程</p><p><b> Abstract</b&
6、gt;</p><p> The Design and Implementation of LAN IM</p><p> Abstract:Along with the high-speed development of the computer network technology, various of applications based on network was born
7、, like information releasing, data sharing ... The development of the LAN is the same fast. Some governments, enterprises and schools constitute a LAN first ,then join into INTERNET. So the instant messenger in LAN was b
8、orned. So I make a new design, and implement it on WINDOWS platform. In my implementation the client and the server were integrated in one program w</p><p> In fact, there is only one service to the user wh
9、ich is not can be used.A good program of network service must can to answer many link request from the client when user input massages. So use JAVA to carry out these functions and particulars are very easy.</p>&
10、lt;p> Design Philosophy:</p><p> Not only could the modern Internet to provide such as search and mail box traditional message service, but the real-time communication function also been well supported
11、.The common software of the real-time communication is base on C/S frame. User should link server, then could communication with others users who also link server. But the real-time communication of point to point is nee
12、dn’t use server, between users whom could immediately communication </p><p> The main program to monitor a port, waiting the user access and constructing a thread class to take over conversation. When the
13、main program product a Socket conversation then take it for the thread to deal with, then the main program continue to monitor. Using the thread class or runnable interface to achieve is a nice method.</p><p&g
14、t; Key words: LAN, instant messaging, client, ServerSocket class, multi thread</p><p><b> 目 錄</b></p><p> 第1章 引 言- 3 -</p><p> 1.1 課題背景及意義- 3 -</p><p&g
15、t; 1.2 課題現(xiàn)狀- 3 -</p><p> 1.3本文的主要工作- 3 -</p><p> 1.4開發(fā)平臺與技術的選擇及介紹- 3 -</p><p> 1.4.1 開發(fā)環(huán)境的介紹- 3 -</p><p> 1.4.2 WINDOWS SOCKETS網(wǎng)絡編程接口概述- 3 -</p><p&
16、gt; 1.4.3開發(fā)平臺簡介- 3 -</p><p> 第2章 需求分析及可行性研究- 3 -</p><p> 2.1需求分析- 3 -</p><p> 2.1.1時間要求- 3 -</p><p> 2.1.2功能要求- 3 -</p><p> 2.1.3系統(tǒng)基本流程圖- 3 -&l
17、t;/p><p> 2.1.4性能要求- 3 -</p><p> 2.1.5測試環(huán)境規(guī)定- 3 -</p><p> 2.2可行性研究- 3 -</p><p> 第3章 相關開發(fā)技術的原理性說明- 3 -</p><p> 3.1 win32編程原理及MFC框架- 3 -</p>&l
18、t;p> 3.1.1 WIN32編程原理- 3 -</p><p> 3.1.2 MFC框架- 3 -</p><p> 3.2 TCP/IP 協(xié)議及WINDOWS SOCKETS網(wǎng)絡編程接口- 3 -</p><p> 3.2.1 TCP/IP協(xié)議簡介- 3 -</p><p> 3.2.2 WINDOWS SOCK
19、ETS網(wǎng)絡編程接口概述- 3 -</p><p> 3.3多線程編程技術- 3 -</p><p> 3.3.1進程及線程概述- 3 -</p><p> 3.3.2 Win32 API對多線程編程的支持- 3 -</p><p> 第4章 總體設計- 3 -</p><p> 4.1體系結構設計
20、- 3 -</p><p> 4.2功能模塊劃分- 3 -</p><p> 4.3數(shù)據(jù)結構設計- 3 -</p><p> 4.4用戶界面設計- 3 -</p><p> 4.4.1啟動畫面設計- 3 -</p><p> 4.4.2主顯示界面- 3 -</p><p>
21、 4.4.3用戶聊天及接收信息界面- 3 -</p><p> 第5章 詳細設計及編碼實現(xiàn)- 3 -</p><p> 參考文獻- 3 -</p><p><b> 致謝。- 3 -</b></p><p><b> 第1章 引 言</b></p><p>
22、 1.1 課題背景及意義</p><p> 近年來,隨著全球信息化進程的不斷發(fā)展,網(wǎng)絡也在飛速發(fā)展。出于高效、快速地處理各種事務的目的,越來越多的企業(yè)在其內(nèi)部使用局域網(wǎng)來進行工作。在內(nèi)部局域網(wǎng)的幫助下,企業(yè)得以簡化信息流程,提高信息交換的速度,從而提高工作效率。然而,隨著企業(yè)規(guī)模的擴大,業(yè)務量的增加,在局域網(wǎng)上運行的應用越來越多,如知識庫、網(wǎng)絡會議、數(shù)據(jù)庫應用和數(shù)據(jù)的同步與備份等,這些應用對局域網(wǎng)的信息吞吐、處
23、理能力的要求也越來越高。這些在企業(yè)內(nèi)部原有局域網(wǎng)設計之初未曾考慮到的新情況的出現(xiàn)使得局域網(wǎng)不堪重負,容易發(fā)生信息阻塞,此時,局域網(wǎng)不但不能提高生產(chǎn)效率,反而成為企業(yè)發(fā)展的瓶頸。 </p><p> 為了解決上述矛盾,人們提出了許多方法。提升網(wǎng)絡帶寬及增加服務器的吞吐能力是解決此矛盾的一種方法。然而,從企業(yè)運行的成本方面考慮,無論是單純地提升網(wǎng)絡帶寬或增加服務器的吞吐能力都不能從根本上解決局域網(wǎng)資源緊張的問題
24、,對舊有局域網(wǎng)的大規(guī)模硬件改造反而會增加企業(yè)的負擔。 </p><p> 我在本文中將討論一種基于Socket的局域網(wǎng)通信工具的設計與實現(xiàn)方法?;赟ocket的局域網(wǎng)通信軟件可以為企業(yè)原有的局域網(wǎng)提供一種良好,安全,快速的通信機制。它的實現(xiàn)無需對企業(yè)原有的局域網(wǎng)硬件進行任何改動,具有實現(xiàn)成本低廉的優(yōu)點,它的使用能有效地降低局域網(wǎng)通信負荷,提高局域網(wǎng)的使用效率,可以很好地解決企業(yè)內(nèi)部局域網(wǎng)的各種通信需求。
25、</p><p> 基于Socket的局域網(wǎng)聊天工具是此類局域網(wǎng)通信軟件的具體實例之一,它很好地詮釋了Socket通信的原理,并且在企業(yè)內(nèi)部通信、教學、討論等應用中都具有一定的實用價值。它具有信息收發(fā)速度快,保密性好,占用網(wǎng)絡帶寬資源低,占用服務器吞吐能力低,易于編程實現(xiàn)等優(yōu)點。 </p><p> 基于Socket的局域網(wǎng)通信軟件應用范圍廣闊,不但可以處理傳統(tǒng)的通信需求,而且也能
26、擴展以適應新型的網(wǎng)絡應用,如網(wǎng)絡教育,數(shù)據(jù)影音傳輸?shù)?,擁有廣泛的應用前景。 </p><p> 1.2 課題現(xiàn)狀 </p><p> 基于局域網(wǎng)的即時通信工具,實際上是互聯(lián)網(wǎng)即時通信工具的一個小規(guī)模版本,廣域網(wǎng)上的即時通信工具,如今一般采用UDP或者 TCP協(xié)議體系來實現(xiàn) ,開發(fā)技術已經(jīng)比較成熟,比如較早的ICQ,MSN Messanger,Yahoo 通這些國外開發(fā)的產(chǎn)品,還有國
27、產(chǎn)的有名的QQ,新浪UC,LAVA-LAVA等,這些工具統(tǒng)統(tǒng)都實現(xiàn)了廣域網(wǎng)上的即時通信,盡管都是即時通信,實現(xiàn)了即時聊天,以及文件傳輸?shù)闹饕δ?,但是也各有各的特色,比如ICQ的巨大客戶群,MSN的個性化表情,YAHOO通的易操作性等。而QQ也具有一個相當方便的屏幕截圖功能,另外就是,所有上述軟件都實現(xiàn)了網(wǎng)絡即時的視頻,語音聊天功能。這些軟件,在使用方面各有特色,在實現(xiàn)方面也各有所長,但基于這些產(chǎn)品正在商業(yè)運營階段,其實現(xiàn)方式屬于商業(yè)機
28、密,具體細節(jié)不可能得知,但是它在大的方面無非就是各種利用各種平臺上的網(wǎng)絡通信接口,建構基于下層TCP/IP,或者UDP/IP協(xié)議的軟件產(chǎn)品。在局域網(wǎng)內(nèi),這些功能的實現(xiàn)跟廣域網(wǎng)相比更加簡單,因為局域網(wǎng)的網(wǎng)絡結構本身比廣域網(wǎng)要復雜,但是又可以借些理解網(wǎng)絡協(xié)議,以及網(wǎng)絡通信工具的實現(xiàn)原理,所以仍然極具研究價值。</p><p> 1.3本文的主要工作</p><p> 本文主要工作是設計一個
29、基于WINDOWS平臺的局域網(wǎng)即時聊天工具,然后闡述本軟件的功能、特點及使用方法,并詳細闡述開發(fā)本軟件所用的相關技術,具體分析本軟件的各個模塊的功能及實現(xiàn)方法,說明本軟件的設計思想及方法。</p><p> 1.4開發(fā)平臺與技術的選擇及介紹</p><p> 1.4.1 開發(fā)環(huán)境的介紹</p><p> 我所設計的是一個面向個人的局域網(wǎng)即時信息軟件,要在短時間
30、內(nèi)開發(fā)出來并且要滿足個人要求,無論是硬件還是軟件都要選擇合適,要求如下:開發(fā)設備應該完備;開發(fā)機器的性能必須穩(wěn)定;操作系統(tǒng)的選擇必須恬當;開發(fā)出的程序可以在盡可能多的平臺上運行;要求運行機配置盡可能低檔。對此,我們選擇的硬件環(huán)境和軟件環(huán)境如下: </p><p> (1) 硬件環(huán)境 </p><p> 開發(fā)該系統(tǒng)應盡可能采用高檔的硬件。因此,在應用時應采用更好的配置。 &l
31、t;/p><p> 處理器:Intel Pentium PIII或更高處理器。 </p><p> 內(nèi)存:128MB或更高。 </p><p> 網(wǎng)絡:局域網(wǎng)。 </p><p> (2) 軟件環(huán)境 </p><p> 選擇好的操作系統(tǒng)和好的編程語言是系統(tǒng)優(yōu)劣的關鍵,我們要求系統(tǒng)在盡
32、可能多的環(huán)境下運行,故選擇Windows XP平臺,對于一些無法在98中運行的API函數(shù),一律不采用,并采取優(yōu)化的算法編寫程序。因VC6.0具有友好的集成開發(fā)界面、面向對象的可視化開發(fā)模式、良好的數(shù)據(jù)庫及多媒體應用支持以及高效的軟件開發(fā)與程序運行,功能更大,開發(fā)效率更高,不僅是網(wǎng)絡環(huán)境下的優(yōu)秀前端開發(fā)語言和工具,也是服務器端Web編程的優(yōu)秀工具。加之我本人對本系統(tǒng)的操作最為熟練,所以選擇該平臺為開發(fā)環(huán)境。 </p>&l
33、t;p> 操作系統(tǒng):Windows XP、Window Vista或Windows 7。 </p><p> 開發(fā)工具:My Eclipse</p><p> 1.4.2 WINDOWS SOCKETS網(wǎng)絡編程接口概述</p><p> 既然選定了WINDOWS平臺,而又要開發(fā)網(wǎng)絡通信程序,所以可以選擇WINDOWS的SOCKETS編程接口,Win
34、dows Sockets是一套開放的、支持多種協(xié)議的Windows下的網(wǎng)絡編程接口?,F(xiàn)在的Winsock已經(jīng)基本上實現(xiàn)了與協(xié)議無關,我們可以使用Winsock來調(diào)用多種協(xié)議的功能,但較常使用的是TCP/IP協(xié)議。Winsockets無疑是我們進行網(wǎng)絡編程的利器。</p><p> 1.4.3開發(fā)平臺簡介</p><p> Java,是由Sun Microsystems公司于1995年5
35、月推出的Java程序設計語言和Java平臺的總稱。用Java實現(xiàn)的HotJava瀏覽器(支持Java applet)顯示了Java的魅力:跨平臺、動態(tài)的Web、Internet計算。從此,Java被廣泛接受并推動了Web的迅速發(fā)展,常用的瀏覽器現(xiàn)在均支持Java applet。</p><p> Java是一種簡單的,面向對象的,分布式的,解釋型的,健壯安全的,結構中立的,可移植的,性能優(yōu)異、多線程的動態(tài)語言。
36、</p><p> JAVA的主要特性:</p><p> ?、臞ava語言是簡單的</p><p> Java語言的語法與C語言和C++語言很接近,使得大多數(shù)程序員很容易學習和使用Java。另一方面,Java丟棄了C++ 中很少使用的、很難理解的、令人迷惑的那些特性,如操作符重載、多繼承、自動的強制類型轉換。特別地,Java語言不使用指針,并提供了自動的廢料收
37、集,使得程序員不必為內(nèi)存管理而擔憂。</p><p> ?、艼ava語言是一個面向對象的</p><p> Java語言提供類、接口和繼承等原語,為了簡單起見,只支持類之間的單繼承,但支持接口之間的多繼承,并支持類與接口之間的實現(xiàn)機制(關鍵字為implements)。Java語言全面支持動態(tài)綁定,而C++ 語言只對虛函數(shù)使用動態(tài)綁定??傊琂ava語言是一個純的面向對象程序設計語言。&l
38、t;/p><p> ⑶Java語言是分布式的</p><p> Java語言支持Internet應用的開發(fā),在基本的Java應用編程接口中有一個網(wǎng)絡應用編程接口(java.net),它提供了用于網(wǎng)絡應用編程的類庫,包括URL、URLConnection、Socket、 ServerSocket等。Java的RMI(遠程方法激活)機制也是開發(fā)分布式應用的重要手段。</p>&l
39、t;p> ?、菾ava語言是健壯的</p><p> Java的強類型機制、異常處理、廢料的自動收集等是Java程序健壯性的重要保證。對指針的丟棄是Java的明智選擇。Java的安全檢查機制使得Java更具健壯性。</p><p> ⑸Java語言是安全的</p><p> Java通常被用在網(wǎng)絡環(huán)境中,為此,Java提供了一個安全機制以防惡意代碼的攻擊
40、。除了Java語言具有的許多安全特性以外,Java對通過網(wǎng)絡下載的類具有一個安全防范機制(類ClassLoader),如分配不同的名字空間以防替代本地的同名類、字節(jié)代碼檢查,并提供安全管理機制(類SecurityManager)讓Java應用設置安全哨兵。 </p><p> ?、蔎ava語言是體系結構中立的</p><p> Java程序(后綴為java的文件)在Java平臺上被編譯為
41、體系結構中立的字節(jié)碼格式(后綴為class的文件), 然后可以在實現(xiàn)這個Java平臺的任何系統(tǒng)中運行。這種途徑適合于異構的網(wǎng)絡環(huán)境和軟件的分發(fā)。 </p><p> ?、薐ava語言是可移植的</p><p> 這種可移植性來源于體系結構中立性,另外,Java還嚴格規(guī)定了各個基本數(shù)據(jù)類型的長度。Java系統(tǒng)本身也具有很強的可移植性,Java編譯器是用Java實現(xiàn)的,Java的運行環(huán)境是用
42、ANSI C實現(xiàn)的。</p><p> ?、蘆ava語言是解釋型的</p><p> 如前所述,Java程序在Java平臺上被編譯為字節(jié)碼格式, 然后可以在實現(xiàn)這個Java平臺的任何系統(tǒng)中運行。在運行時,Java平臺中的Java解釋器對這些字節(jié)碼進行解釋執(zhí)行,執(zhí)行過程中需要的類在聯(lián)接階段被載入到運行環(huán)境中。</p><p> ?、蚃ava是高性能的</p&g
43、t;<p> 與那些解釋型的高級腳本語言相比,Java的確是高性能的。事實上,Java的運行速度隨著JIT(Just-In-Time)編譯器技術的發(fā)展越來越接近于C++。 </p><p> ?、蜫ava語言是多線程的</p><p> 在Java語言中,線程是一種特殊的對象,它必須由Thread類或其子(孫)類來創(chuàng)建。通常有兩種方法來創(chuàng)建線程:其一,使用型構為Threa
44、d(Runnable) 的構造子將一個實現(xiàn)了Runnable接口的對象包裝成一個線程,其二,從Thread類派生出子類并重寫run方法,使用該子類創(chuàng)建的對象即為線程。值得注意的是Thread類已經(jīng)實現(xiàn)了Runnable接口,因此,任何一個線程均有它的run方法,而run方法中包含了線程所要運行的代碼。線程的活動由一組方法來控制。 Java語言支持多個線程的同時執(zhí)行,并提供多線程之間的同步機制(關鍵字為synchronized)。<
45、/p><p> ?、螶ava語言是動態(tài)的</p><p> Java語言的設計目標之一是適應于動態(tài)變化的環(huán)境。Java程序需要的類能夠動態(tài)地被載入到運行環(huán)境,也可以通過網(wǎng)絡來載入所需要的類。這也有利于軟件的升級。另外,Java中的類有一個運行時刻的表示,能進行運行時刻的類型檢查。</p><p> 第2章 需求分析及可行性研究</p><p>
46、;<b> 2.1需求分析</b></p><p><b> 2.1.1時間要求</b></p><p> 本項目作為大學本科畢業(yè)設計題目,從3月5號接受選題開始,在4月10號之前最終完成論文。</p><p><b> 2.1.2功能要求</b></p><p>&l
47、t;b> 這個程序要實現(xiàn)</b></p><p> 程序啟動之后就能看到當前哪些機器在線,哪些可以與之進行對等通信。</p><p> 一旦有某個網(wǎng)內(nèi)的機器上線了,要有即時通知,并能及時更新用戶界面中的用戶列表。</p><p> 當雙擊某個列表項的時候,要彈出聊天對話框,可以在其中編輯要發(fā)送的聊天信息,并進行發(fā)送。</p>
48、<p><b> 聊天界面要人性化。</b></p><p> (5)當有人向我發(fā)送信息的時候,要彈出一個對話框,顯示用戶接收到的信息,并且知道是誰人所發(fā),并且在當前對話框內(nèi)進行信息的回復。</p><p> 2.1.3系統(tǒng)基本流程圖</p><p> 圖2-1 局域網(wǎng)聊天系統(tǒng)的系統(tǒng)流程圖</p><p&g
49、t;<b> 2.1.4性能要求</b></p><p> 首先要求程序要完全可靠,可以應付種種由于系統(tǒng)問題產(chǎn)生的錯誤,比如初始網(wǎng)絡失敗,對方突然下線等。要求提前設想到類似的盡可能多的可能發(fā)生的事件,做出相應的應對措施,并向用戶提交簡單易懂清晰明白的提示信息。</p><p> 程序要有良好的容錯性,當用戶進行非法操作時或者系統(tǒng)本身出現(xiàn)問題時要能以最好的方式退出
50、程序,避免發(fā)生程序假死現(xiàn)象。</p><p> 開發(fā)文檔要有好的易理解性,如果系統(tǒng)又要交由別人接手開發(fā),或者自己由于種種原因需要進行二次開發(fā),那么要保證以后能夠清晰的理解整個系統(tǒng)的設計思路以及實現(xiàn)細節(jié)。</p><p> 要求程序對所運行之系統(tǒng)的硬件條件要求盡可能低,運行時內(nèi)存占用盡可能小,響應速度要盡可能快。并且不發(fā)生內(nèi)存泄漏之類影響系統(tǒng)運行的錯誤事件。并且要求易于維護及擴展。所以應
51、該采用模塊化開發(fā),各個模塊之間不要有太多的聯(lián)系,以免維護困難。</p><p> 2.1.5測試環(huán)境規(guī)定</p><p> 在開發(fā)過程中由開發(fā)人員自己,也就是我本人隨時進行內(nèi)部部分白盒測試,在開發(fā)完成以后,自己進行一個全面的白盒測試,然后請同學幫忙進行黑盒測試。</p><p><b> 2.2可行性研究</b></p>&
52、lt;p> (1)成本可行性分析</p><p> 因為本軟件只做開發(fā)學習使用,所以暫且不考慮經(jīng)濟成本及盈利問題。</p><p> ?。?)技術可行性分析</p><p> 首先我已經(jīng)搭建好開發(fā)所需要的軟硬件平臺,并進行了合理而完善的需求分析,做好了充分的前期準備工作,其次因為本程序的平臺將基于WINDOWS,將要使用網(wǎng)絡通信技術,而WINDOWS有完
53、善成熟的網(wǎng)絡通信接口,以及與JAVA開發(fā)環(huán)境的嚴密契合能力,加之相類似的更大規(guī)模的INTERNET通信工具產(chǎn)品也已有例在先,所以這個程序的開發(fā)可行性在技術上是完全可行的。</p><p> 第3章 相關開發(fā)技術的原理性說明</p><p> 3.1 win32編程原理及MFC框架</p><p> 3.1.1 WIN32編程原理</p><
54、p> 所謂的Win32開發(fā),就是在C語言的層面上,直接使用Win32 API開發(fā)Windows應用程序或者系統(tǒng)程序。雖說現(xiàn)在直接用Win32 API開發(fā)應用程序的人已經(jīng)不多了,但是深入理解Windows系統(tǒng)程序設計原理,仍然是成為Windows開發(fā)高手的良好途徑。所謂的Win32,其實是一個API規(guī)范,與UNIX系統(tǒng)編程接口標準POSIX是相對應的。下面是進行直接的WIN32 SDK方式編程的基本思路或者說是一個框架:</
55、p><p> 一個WINDOWS程序分為程序代碼和UI(User Interface 用戶接口)資源兩大部份,兩部份最后以RC編譯程序整合為一個完整的EXE文件。所謂UI資源是指功能菜單、對話框、程序圖標、光標形狀等等東西。這些UI資源的實際內(nèi)容(二進制代碼)系借助各種工具產(chǎn)生,并以各種擴展名存在,如 .ico .bmp .cur等等。程序員必須在一個所謂的資源描述檔(.rc )中描述它們。RC編譯器( RC.EX
56、E )讀取RC 文件的描述后將所有UI資源文件集中制作出一個.RES 文件,再與程序代碼結合在一起,這才是一個完整的 Windows可執(zhí)行文件。</p><p> 與控制臺程序相同的是,一個WIN32程序也必須有一個程序入口點,但是在這兒它不再叫main(),而叫做WinMain(),當WINDOWS的SHELL檢測到用戶欲執(zhí)行一個EXE程序,就會調(diào)用加載器把程序進行加載,然后調(diào)用C startup code,
57、后者再調(diào)用WinMain(),程序的執(zhí)行就開始了,WinMain()函數(shù)的原型為:int CALLBACK WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow);</p><p> 下面程序必須進行必要的初始化工作-產(chǎn)生窗口,第一步是注冊一個窗口類:用API函數(shù):RegisterClass(),而這個
58、函數(shù)需要一個已經(jīng)定義好的系統(tǒng)結構:WNDCLASS,這個結構里面定義了窗口的種種屬性,需要自己定義,但是許多屬性都有默認值。然后調(diào)用CreateWindow()函數(shù)來產(chǎn)生具有上述定義屬性的已注冊窗口,但是需要注意的是它只是生成窗口,但并不顯示之,所以還需要調(diào)用一個函數(shù)ShowWindow()將它顯示在屏幕上,做完這些初始化工作以后,系統(tǒng)將進入消息循環(huán):</p><p> while (GetMessage(&a
59、mp;msg, NULL, 0, 0)){</p><p> TranslateMessage(&msg);</p><p> DispatchMessage(&msg);}</p><p> 當消息循環(huán)捕捉到消息以后將交由窗口函數(shù)WndProc()窗口函數(shù)進行相應的處理。這樣,一個基于消息事件驅動的WIN32程序的雛形就建立了起來。</
60、p><p> 3.1.2 MFC框架</p><p> 由上面的介紹可以看出,直接用API函數(shù)開發(fā)一個WIN32程序是相當麻煩的,有好多既定的重復性的工作要做,所以微軟就用C++的類機制將絕大部分的API函數(shù)進行了封裝,構成了類,并且將基本的流程也封裝在類機制下面,大大簡化了WIN32開的的復雜性,尤其是在開發(fā)比較大型程序的時候這個便宜性更會得以體現(xiàn)。它就是Microsoft Founda
61、tion Classes,簡稱為MFC。MFC構架了一個龐大的類體系結構,在4.0時代就多達189個類,程序代碼達252個文件,58個頭文件,共10MB之多,MFC4.2時又多加了29個類,但是最為主干的是下面類結構示圖3-2所示的一些類: </p><p> 圖3-2 MFC類框架主體</p><p> 構建一個基于MFC框架的程序,可以使用MFC的向導程序,但首先要明白,一個基于M
62、FC的程序可以有幾種類型:基于單文檔結構的程序,基于多文檔結構的程序以及基于對話框的應用程序,不同類型的程序具有不同的程序屬性。使用其向導以及控件編程,使得不論是界面編寫,還是程序內(nèi)核設計,都更加的簡單。其中有合理的消息映射機制,有方便的運行時類型識別功能,更有文檔/視圖結構設計,文檔串行化功能等非常多的優(yōu)秀功能。</p><p> 3.2 TCP/IP 協(xié)議及WINDOWS SOCKETS網(wǎng)絡編程接口<
63、/p><p> 3.2.1 TCP/IP協(xié)議簡介</p><p> TCP/IP協(xié)議實際上就是在物理網(wǎng)上的一組完整的網(wǎng)絡協(xié)議。其中TCP是提供傳輸層服務,而IP則是提供網(wǎng)絡層服務。TCP/IP主要包括以下協(xié)議:</p><p> IP:網(wǎng)間協(xié)議(Internet Protocol) 負責主機間數(shù)據(jù)的路由和網(wǎng)絡上數(shù)據(jù)的存儲。同時為ICMP,TCP,UDP提供分組發(fā)送
64、服務。用戶進程通常不需要涉及這一層。</p><p> ICMP:網(wǎng)間報文控制協(xié)議(Internet Control Message Protocol),此協(xié)議處理網(wǎng)關和主機的差錯和傳送控制。</p><p> TCP: 傳輸控制協(xié)議(Transmission Control Protocol),這是一種提供給用戶進程的可靠的全雙工字節(jié)流面向連接的協(xié)議。它要為用戶進程提供虛電路服務,并
65、為數(shù)據(jù)可靠傳輸建立檢查。</p><p> TCP/IP協(xié)議的核心部分是傳輸層協(xié)議(TCP、UDP),網(wǎng)絡層協(xié)議(IP)和物理接口層,這三層通常是在操作系統(tǒng)內(nèi)核中實現(xiàn)。因此用戶一般不涉及。編程時,</p><p> 編程界面有兩種形式:</p><p> 一、是由內(nèi)核直接提供的系統(tǒng)調(diào)用;</p><p> 二、使用以庫函數(shù)方式提供的各
66、種函數(shù)。前者為核內(nèi)實現(xiàn),后者為核外實現(xiàn)。用戶服務要通過核外的應用程序才能實現(xiàn),所以要使用套接字(socket)來實現(xiàn)。</p><p> 因為在本設計中使用了ICMP協(xié)議進行掃描局域網(wǎng)功能的實現(xiàn),所以對ICMP進行進一步描述:</p><p> IP協(xié)議是一種不可靠的協(xié)議,無法進行差錯控制。但IP協(xié)議可以借助其他協(xié)議來實現(xiàn)這一功能,ICMP就是其中最常用的協(xié)議之一。ICMP(Inter
67、net Control Messages Protocol, 網(wǎng)間控制報文協(xié)議)允許主機或路由器報告差錯情況和提供有關異常情況的報告。一般來說,ICMP報文提供針對網(wǎng)絡層的錯誤診斷、擁塞控制、路徑控制和查詢服務四項大的功能。如,當一個分組無法到達目的站點或TTL超時后,路由器就會丟棄此分組,并向源站點返回一個目的站點不可到達的ICMP報文。ICMP報文大體可以分為兩種類型,即ICMP差錯報文和ICMP詢問報文。但細分又可分為很多類型,如
68、圖3-3所示:</p><p> 圖3-3 ICMP報文類型圖</p><p> ICMP報文被封裝在IP數(shù)據(jù)報內(nèi)部傳輸。如下圖3-4所示,是ICMP回射請求和應答報文頭部格式。各種ICMP報文的前32bits都一樣,它們是:8bits類型和8bits代碼字段:一起決定了ICMP報文的類型。常見的有:類型8、代碼0:回射請求。類型0、代碼0:回射應答。類型11、代碼0:超時。16bit
69、s校驗和字段:包括數(shù)據(jù)在內(nèi)的整個ICMP數(shù)據(jù)包的校驗和,其計算方法和IP頭部校驗和的計算方法是一樣的。</p><p> 圖3-4 ICMP回射請求和應答報文頭部格式</p><p> 對于ICMP回射請求和應答報文來說,接下來是16bits標識符字段:用于標識本ICMP進程。最后是16bits序列號字段:用于判斷回射應答數(shù)據(jù)報。</p><p> 下面是IC
70、MP不可到達報文的頭部格式:</p><p> 圖3-5 ICMP不可到達報文頭部格式</p><p> 下面是ICMP超時報文的頭部格式:</p><p> 圖3-6 ICMP超時報文頭部格式</p><p> 由于篇幅有限,這里不再分析其他類型ICMP協(xié)議數(shù)據(jù)包的格式。</p><p> 簡略的說,ICM
71、P協(xié)議消息包含永遠不會變化的三個字段,隨后是ICMP數(shù)據(jù),然后是引發(fā)此消息的源IP數(shù)據(jù)包包頭。不會變化的三個字段中,前8個字節(jié)包含ICMP類型(主要類型)、第二個字段包含了類型代碼、第三個字段是ICMP消息校驗值。</p><p> 我們需要認識到,ICMP協(xié)議在某些情況下不會發(fā)送錯誤信息。ICMP不會對ICMP信息做出響應。如果ICMP回應其它ICMP消息,這些消息的數(shù)量會爆炸性增長而演變?yōu)橐粓鯥CMP消息風
72、暴。為了防止出現(xiàn)廣播風暴,ICMP消息也不會回應一個廣播或者多播地址。</p><p> 最有用的ICMP數(shù)據(jù)包類型“目標不可達”(類型三)的消息。錯誤消息一般由路由器生成,并且發(fā)送給數(shù)據(jù)包的來源。大多數(shù)錯誤信息還將發(fā)送給與發(fā)送的數(shù)據(jù)包有關的應用程序。在這種情況下,TCP協(xié)議將廣泛使用ICMP協(xié)議。</p><p> 在本設計當中就是使用了ICMP來實現(xiàn)了一個PING功能,來檢測局域網(wǎng)
73、上的哪些機器當前處于可以到達狀態(tài)的,ICMP回射請求和ICMP回射應答報文是配合工作的。當源主機向目標主機發(fā)送了ICMP回射請求數(shù)據(jù)包后,它期待著目標主機的回答。目標主機在收到一個ICMP回射請求數(shù)據(jù)包后,它會交換源、目的主機的地址,然后將收到的ICMP回射請求數(shù)據(jù)包中的數(shù)據(jù)部分原封不動地封裝在自己的ICMP回射應答數(shù)據(jù)包中,然后發(fā)回給發(fā)送ICMP回射請求的一方。如果校驗正確,發(fā)送者便認為目標主機的回射服務正常,也即物理連接暢通。<
74、;/p><p> 綜上所述,只要網(wǎng)路之間能支持 IP ,那就可透過 ICMP 進行錯誤偵測與回報。如果要查看具體的細節(jié)情況,可以查閱RFC文件,與ICMP相關的文件有:RFC-792﹑RFC-896﹑RFC-950等。</p><p> 3.2.2 WINDOWS SOCKETS網(wǎng)絡編程接口概述</p><p> 在網(wǎng)絡編程中最常用的方案便是Client/Serv
75、er (客戶機/服務器)模型。在這種方案中客戶應用程序向服務器程序請求服務。一個服務程序通常在一個眾所周知的地址監(jiān)聽對服務的請求,也就是說,服務進程一直處于休眠狀態(tài),直到一個客戶向這個服務的地址提出了連接請求。在這個時刻,服務程序被"驚醒"并且為客戶提供服務-對客戶的請求作出適當?shù)姆磻?lt;/p><p> 為了方便這種Client/Server模型的網(wǎng)絡編程,90年代初,由Microsoft
76、聯(lián)合了其他幾家公司共同制定了一套WINDOWS下的網(wǎng)絡編程接口,即Windows Sockets規(guī)范,它不是一種網(wǎng)絡協(xié)議,而是一套開放的、支持多種協(xié)議的Windows下的網(wǎng)絡編程接口?,F(xiàn)在的Winsock已經(jīng)基本上實現(xiàn)了與協(xié)議無關,你可以使用Winsock來調(diào)用多種協(xié)議的功能,但較常使用的是TCP/IP協(xié)議。</p><p> Socket實際在計算機中提供了一個通信端口,可以通過這個端口與任何一個具有Sock
77、et接口的計算機通信。應用程序在網(wǎng)絡上傳輸,接收的信息都通過這個Socket接口來實現(xiàn)。如下圖3-7所示: </p><p> 圖3-7 面向連接的套接字的系統(tǒng)調(diào)用時序圖</p><p> 3.3多線程編程技術</p><p> 3.3.1進程及線程概述</p><p> 進程和線程都是操作系統(tǒng)的概念。進程是應用程序的執(zhí)行實例,每
78、個進程是由私有的虛擬地址空間、代碼、數(shù)據(jù)和其它各種系統(tǒng)資源組成,進程在運行過程中創(chuàng)建的資源隨著進程的終止而被銷毀,所使用的系統(tǒng)資源在進程終止時被釋放或關閉。</p><p> 線程是進程內(nèi)部的一個執(zhí)行單元。系統(tǒng)創(chuàng)建好進程后,實際上就啟動執(zhí)行了該進程的主執(zhí)行線程,主執(zhí)行線程以函數(shù)地址形式,比如說main或WinMain函數(shù),將程序的啟動點提供給Windows系統(tǒng)。主執(zhí)行線程終止了,進程也就隨之終止。</p&
79、gt;<p> 每一個進程至少有一個主執(zhí)行線程,它無需由用戶去主動創(chuàng)建,是由系統(tǒng)自動創(chuàng)建的。用戶根據(jù)需要在應用程序中創(chuàng)建其它線程,多個線程并發(fā)地運行于同一個進程中。一個進程中的所有線程都在該進程的虛擬地址空間中,共同使用這些虛擬地址空間、全局變量和系統(tǒng)資源,所以線程間的通訊非常方便,多線程技術的應用也較為廣泛。</p><p> 多線程可以實現(xiàn)并行處理,避免了某項任務長時間占用CPU時間。要說明
80、的一點是,目前大多數(shù)的計算機都是單處理器(CPU)的,為了運行所有這些線程,操作系統(tǒng)為每個獨立線程安排一些CPU時間,操作系統(tǒng)以輪換方式向線程提供時間片,這就給人一種假象,好象這些線程都在同時運行。由此可見,如果兩個非常活躍的線程為了搶奪對CPU的控制權,在線程切換時會消耗很多的CPU資源,反而會降低系統(tǒng)的性能。這一點在多線程編程時應該注意。</p><p> Win32 SDK函數(shù)支持進行多線程的程序設計,并
81、提供了操作系統(tǒng)原理中的各種同步、互斥和臨界區(qū)等操作。Visual C++ 6.0中,使用MFC類庫也實現(xiàn)了多線程的程序設計,使得多線程編程更加方便。</p><p> 3.3.2 Win32 API對多線程編程的支持</p><p> Win32 提供了一系列的API函數(shù)來完成線程的創(chuàng)建、掛起、恢復、終結以及通信等工作。下面將選取其中的一些重要函數(shù)進行說明。 </p>&
82、lt;p> (1) HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,</p><p> DWORD dwStackSize,</p><p> LPTHREAD_START_ROUTINE lpStartAddress,</p><p> LPVOID lpParameter,&
83、lt;/p><p> DWORD dwCreationFlags,</p><p> LPDWORD lpThreadId);</p><p> 該函數(shù)在其調(diào)用進程的進程空間里創(chuàng)建一個新的線程,并返回已建線程的句柄。</p><p> (2) DWORD SuspendThread(HANDLE hThread);</p>
84、<p> 該函數(shù)用于掛起指定的線程,如果函數(shù)執(zhí)行成功,則線程的執(zhí)行被終止。</p><p> (3) DWORD ResumeThread(HANDLE hThread);</p><p> 該函數(shù)用于結束線程的掛起狀態(tài),執(zhí)行線程。 </p><p> (4) VOID ExitThread(DWORD dwExitCode);</p>
85、<p> 該函數(shù)用于線程終結自身的執(zhí)行,主要在線程的執(zhí)行函數(shù)中被調(diào)用。其中參數(shù)dwExitCode用來設置線程的退出碼。 </p><p> (5) BOOL TerminateThread(HANDLE hThread,DWORD dwExitCode);</p><p> 一般情況下,線程運行結束之后,線程函數(shù)正常返回,但是應用程序可以調(diào)用TerminateThre
86、ad強行終止某一線程的執(zhí)行。</p><p> 使用TerminateThread()終止某個線程的執(zhí)行是不安全的,可能會引起系統(tǒng)不穩(wěn)定;雖然該函數(shù)立即終止線程的執(zhí)行,但并不釋放線程所占用的資源。因此,一般不建議使用該函數(shù)。 </p><p> (6) BOOL PostThreadMessage(DWORD idThread,UINT Msg,WPARAM wParam,LPARAM
87、 lParam);</p><p> 該函數(shù)將一條消息放入到指定線程的消息隊列中,并且不等到消息被該線程處理時便返回。</p><p> 調(diào)用該函數(shù)時,如果即將接收消息的線程沒有創(chuàng)建消息循環(huán),則該函數(shù)執(zhí)行失敗。</p><p><b> 第4章 總體設計</b></p><p><b> 4.1體系結構
88、設計</b></p><p> 通常的通信工具,都采用客戶機/服務器(C/S)體系結構,C/S結構是這樣的一種結構:它包括一個客戶機(或前端),一個服務器(或稱后端),客戶機的作用是訪問和處理遠程服務器上的數(shù)據(jù),服務器的作用是接收和處理客戶機的數(shù)據(jù)請求。有時,可能有多個客戶向同一個服務器同時請求服務,這就需要服務器決定怎樣處理這些請求。Client/Server結構是當前數(shù)據(jù)庫應用程序中極為流行的一
89、種方式。尤其是網(wǎng)絡技術的發(fā)展,使得當前很多系統(tǒng)都采用這種方式進行構造,其最大的優(yōu)點是將計算機工作任務分別由客戶端和服務器端來共同完成,這樣有利于充分合理的利用系統(tǒng)資源。另外它的服務器端還可以將信息集中起來,任何客戶機都可以通過訪問服務器而獲得所需的信息。Client/Server模型最終可歸結為一種“請求/應答”關系。一個請求總是首先被客戶發(fā)出,然后服務器總是被動地接收請求,返回客戶需要的結果。在客戶發(fā)出一個請求之前,服務進程一直處于休
90、眠狀態(tài)。一個客戶提出請求后,服務進程被“喚醒”并且為客戶提供服務,對客戶的請求做出所需要的應答。</p><p> 圖4-1客戶機/服務器通信結構示圖</p><p> 但是具體到現(xiàn)在這個項目,如果要做成C/S結構,需要在局域網(wǎng)內(nèi)架設一個服務器,而在一個局域網(wǎng)中,如果網(wǎng)絡結構不是集中式的而是分散式的,那么可能沒有一臺機器來充當服務器這個角色,比如我們的校園宿舍網(wǎng)絡就是如此。所以說,我的
91、設計是每個程序自己既充當客戶機又充當服務器,自己維護網(wǎng)絡上的客戶機列表,每兩個客戶端要進行連結時都直接連通而不用通過服務器來進行信息的中轉,這樣雖然損失了一些性能各帶寬資源,但是對通信量不是很大的局域網(wǎng),這點損失可以由換得的專門架設服務器的優(yōu)點來彌補。所以,系統(tǒng)結構將設計成如下方式:</p><p> 當然,上述圖示只是通信數(shù)據(jù)的一個流向示意圖,不是真正的網(wǎng)絡拓撲結構,也就是說其中的服務器可能只是裝了服務器軟件
92、的一臺普通工作站。在底層的數(shù)據(jù)流向中,也就是網(wǎng)絡的物理連結,并非我們這個軟件所能決定的,我們的所做都是在一個透明的數(shù)據(jù)通信層之上的。</p><p><b> 4.2功能模塊劃分</b></p><p> 因為在本系統(tǒng)中,每一個客戶端系統(tǒng)都是相同的也就是具體到通信雙方而言其實是對稱的,所以只需要考慮一個系統(tǒng)就可以了。</p><p> 根
93、據(jù)以上的系統(tǒng)需求分析,以及體系結構設計,可以對系統(tǒng)進行如下劃分(如功能模塊劃分如圖4-3所示)。其中主線程模塊完成對網(wǎng)絡的初始化,然后啟動兩個子線程:服務端監(jiān)聽線程以及網(wǎng)絡掃描模塊線程,然后由網(wǎng)絡掃描模塊得到當前的網(wǎng)絡用戶分布情況,并填充相關的數(shù)據(jù)結構,然后生成用戶列表界面顯示給用戶。</p><p> 通信模塊又包括兩個子模塊:數(shù)據(jù)接收模塊和數(shù)據(jù)發(fā)送模塊,這兩個模塊都由系統(tǒng)定義的網(wǎng)絡事件來觸發(fā)。</p&
94、gt;<p> 輸入/輸出模塊用來響應用戶雙擊用戶列表的某一項要準備發(fā)送信息時的消息,以及當系統(tǒng)接收到某個網(wǎng)絡用戶發(fā)送來的消息,要將其顯示給用戶的時候網(wǎng)絡掃描模塊是由主線程模塊啟動,進行網(wǎng)絡掃描,確定哪些用戶當前處于可到達狀態(tài),以及哪些可到達狀態(tài)的用戶安裝有相應的通信軟件,并啟動之可以與之進行通信。</p><p> 圖4-2 功能模塊劃分示圖</p><p> 我覺得
95、這樣的模塊劃分設計符合強內(nèi)聚,弱耦合的原則,并且易于實現(xiàn)。</p><p><b> 4.3數(shù)據(jù)結構設計</b></p><p> 由于系統(tǒng)首先要維護一個網(wǎng)絡用戶列表,所以要設計一個數(shù)組。這個數(shù)組具體可為255行2列數(shù)組,每一行代表局域網(wǎng)中的一臺主機,然后第一列代表其是否處于可到達狀態(tài),第二列代表其是否處于可通信狀態(tài)。</p><p>
96、因為程序剛啟動時的網(wǎng)絡掃描階段耗時較久,所以應當在程序啟動后以一個人性化的界面提示用戶不要以為程序無法響應了,暫時的緩慢是正常反應。</p><p><b> 4.4用戶界面設計</b></p><p> 4.4.1啟動畫面設計</p><p> 用戶界面將由MFC框架的基于對話框的應用程序模板生成,然后在模板的基礎上做具體的設計,美化修
97、改。當用戶雙擊程序圖標時應該正常啟動程序,并顯示啟動畫面,顯示版本及作者信息。 </p><p> 4.4.2主顯示界面</p><p> 當掃描完畢時后,在主顯示界面中就會顯示出局域網(wǎng)內(nèi)所有當前在線的用戶列表,并且顯示哪些主機可以進行聊天。并且由于顯示是即時的,也就是掃描完一臺馬上顯示出來,并且用戶可以看到當前正在掃描哪一臺機器,這樣的設計也是比較合理的,如下圖4-5所示。本程序還有
98、一個附加非常方便的功能就是上線提示,當局域網(wǎng)內(nèi)某用戶打開了對應的程序,那么就會彈出相應的提示,并即時更新用戶列表。</p><p> 圖4-1程序主顯示界面</p><p> 4.4.3用戶聊天及接收信息界面</p><p> 當雙擊列表中的某一項時,會彈出聊天對話框,來實現(xiàn)消息發(fā)送功能,或者當程序接收到某個網(wǎng)內(nèi)用戶發(fā)來的信息時,也要彈出對話框向用戶進行顯示。
99、</p><p> 第5章 詳細設計及編碼實現(xiàn)</p><p> import java.awt.BorderLayout;</p><p> import java.awt.Dimension;</p><p> import java.awt.Toolkit;</p><p> import java.a
100、wt.event.ActionEvent;</p><p> import java.awt.event.ActionListener;</p><p> import java.io.BufferedReader;</p><p> import java.io.InputStreamReader;</p><p> import
101、java.io.PrintWriter;</p><p> import java.net.ServerSocket;</p><p> import java.net.Socket;</p><p> import javax.swing.JButton;</p><p> import javax.swing.JFrame;<
102、;/p><p> import javax.swing.JLabel;</p><p> import javax.swing.JPanel;</p><p> import javax.swing.JScrollPane;</p><p> import javax.swing.JTextArea;</p><p&g
103、t; import javax.swing.JTextField;</p><p> import javax.swing.ScrollPaneConstants;</p><p><b> //測試類</b></p><p> public class Exec {</p><p> public stati
104、c void main(String[] args) {</p><p> // 創(chuàng)建窗體類變量</p><p> DemoWindow dw = new DemoWindow("基于窗體界面的點對點聊天程序");</p><p> // 將窗體的寬度和高度分別設置為屏幕寬度和屏幕高度的1/3,左上角位置也設置為屏幕寬度和屏幕高度的1/3處
105、</p><p> Toolkit theKit = dw.getToolkit();</p><p> Dimension wndSize = theKit.getScreenSize();</p><p> dw.setBounds(wndSize.width / 3, wndSize.height / 3, wndSize.width / 3,</
106、p><p> wndSize.height / 3);</p><p> // 點擊關閉按鈕可以退出程序</p><p> dw.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</p><p> // 設置窗體為可見</p><p> dw.setVisible(t
107、rue);</p><p><b> }</b></p><p><b> }</b></p><p><b> // 界面窗體</b></p><p> class DemoWindow extends JFrame implements ActionListener
108、 {</p><p><b> // 布局面板</b></p><p> JPanel jp1 = new JPanel();</p><p> JPanel jp2 = new JPanel();</p><p><b> // 提示標簽</b></p><p>
109、 JLabel jl1 = new JLabel("對方主機");</p><p> JLabel jl2 = new JLabel("本地端口");</p><p> JLabel jl3 = new JLabel("對方端口");</p><p> // 輸入對方主機IP或者域名的文本框</
110、p><p> JTextField jtf1 = new JTextField(8);</p><p> // 輸入本地端口的文本框</p><p> JTextField jtf2 = new JTextField(3);</p><p> // 輸入對方端口的文本框</p><p> JTextField j
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 局域網(wǎng)聊天軟件畢業(yè)論文
- 局域網(wǎng)聊天軟件-畢業(yè)論文
- java畢業(yè)論文---局域網(wǎng)聊天軟件
- 基于java局域網(wǎng)聊天軟件畢業(yè)論文
- 局域網(wǎng)聊天軟件的設計與實現(xiàn)畢業(yè)論文
- 基于java局域網(wǎng)聊天軟件
- java局域網(wǎng)聊天室系統(tǒng)畢業(yè)論文
- 局域網(wǎng)聊天工具設計畢業(yè)論文
- 畢業(yè)設計--局域網(wǎng)聊天系統(tǒng)
- 局域網(wǎng)小型局域網(wǎng)組建畢業(yè)論文
- 軟件課程設計---局域網(wǎng)聊天程序
- 原創(chuàng)畢業(yè)設計論文局域網(wǎng)聊天系統(tǒng)
- 畢業(yè)論文--局域網(wǎng)(小型局域網(wǎng))組建
- 局域網(wǎng)聊天系統(tǒng)的設計與實現(xiàn)-畢業(yè)論文
- 局域網(wǎng)聊天系統(tǒng)畢業(yè)設計
- vc局域網(wǎng)聊天室
- 軟件課程設計報告--局域網(wǎng)聊天程序
- 局域網(wǎng)畢業(yè)論文
- 局域網(wǎng)畢業(yè)論文
- mfc小型局域網(wǎng)聊天室的實現(xiàn)畢業(yè)論文
評論
0/150
提交評論