版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 課 程 設(shè) 計(jì)</p><p> 字 第 </p><p> 學(xué) 院 信息科學(xué)與工程學(xué)院 </p><p> 班 級(jí) 通信0901 </p><p> 姓 名 </p><p> 學(xué)
2、 號(hào) </p><p> 2011年6月26日</p><p> 課 程 設(shè) 計(jì) 任 務(wù) 書</p><p> 信息科學(xué)與工程 學(xué)院 通信工程 專業(yè)</p><p> 學(xué)生姓名 學(xué)號(hào)
3、 </p><p> 課程設(shè)計(jì)題目 點(diǎn)對(duì)點(diǎn)通信的計(jì)算機(jī)實(shí)現(xiàn) </p><p> 課程設(shè)計(jì)內(nèi)容與要求:</p><p> 1.使用Java高級(jí)面向?qū)ο缶幊陶Z(yǔ)言編寫一個(gè)網(wǎng)絡(luò)聊天程序。</p><p> 2.聊天程序應(yīng)該能夠通過(guò)英特網(wǎng)進(jìn)行簡(jiǎn)單的字符發(fā)送與接收。</p><p> 3
4、.類似于一般的主流網(wǎng)絡(luò)即時(shí)聊天程序,以騰訊QQ為例,為了簡(jiǎn)化程序和系統(tǒng)結(jié)構(gòu),將騰訊QQ中的“客戶端——服務(wù)器——客戶端”的數(shù)據(jù)傳輸方式改為“客戶端——服務(wù)器”的模式。</p><p> 4.程序應(yīng)該具有圖形界面,要具備聊天程序的基本雛形。</p><p> 5. 理解Socket的基本概念工作原理,掌握Socket的建立、監(jiān)聽、連接、發(fā)送數(shù)據(jù)和接收數(shù)據(jù)。</p><
5、p> 6*.完成網(wǎng)線水晶頭的制作并了解其工作機(jī)理。(見附二部分)</p><p> 設(shè)計(jì)開始日期 2011年6月21日 指導(dǎo)教師 </p><p> 教研室主任 (簽字)</p><p> 設(shè)計(jì)完成日期 2011年6月25日</p><p> 院長(zhǎng)(系主任)
6、 (簽字)</p><p> 一.時(shí)間安排與安排情況:</p><p> 6月21日 了解課題,著重查找與課題相關(guān)的資料。</p><p> 6月22日——6月23日 仔細(xì)閱讀相關(guān)理論知識(shí),并根據(jù)具體情況,確定設(shè)計(jì)的方案。</p><p> 6月23日——6月24日 編寫Java程序并調(diào)試
7、程序。</p><p> 6月25日 課程設(shè)計(jì)答辯,同時(shí)完成課程設(shè)計(jì)報(bào)告。</p><p><b> 二.課題介紹:</b></p><p> 互聯(lián)網(wǎng)的普及給人們的通訊方式帶來(lái)了一場(chǎng)革命,而在這場(chǎng)革命又反過(guò)來(lái)促進(jìn)互聯(lián)網(wǎng)的普及以及進(jìn)步,即時(shí)聊天是因特網(wǎng)的重要運(yùn)用之一,目前主流即時(shí)聊天軟件有騰訊QQ,微軟MSN,
8、網(wǎng)易泡泡,新浪UC,阿里旺旺等等,而其中風(fēng)靡中國(guó)乃至亞洲的QQ軟件以其合理的界面,豐富的功能,以及超強(qiáng)的性能成為無(wú)數(shù)企業(yè)模仿的對(duì)象。目前的網(wǎng)路主流聊天程序雖然用途各有側(cè)重,但其實(shí)基本原理和架構(gòu)是差不多的。我們這次做的就是即使網(wǎng)絡(luò)聊天程序中最基本最簡(jiǎn)單但也最核心的部分——即寫一個(gè)程序能夠?qū)崿F(xiàn)簡(jiǎn)單的字符發(fā)送和接受,其他主流網(wǎng)絡(luò)聊天程序無(wú)論在怎么變,也無(wú)法擺脫這個(gè)雛形。</p><p><b> 三.設(shè)計(jì)原
9、理:</b></p><p> 1. TCP/IP協(xié)議 </p><p> TCP/IP(傳輸控制協(xié)議/網(wǎng)際協(xié)議)是互聯(lián)網(wǎng)中的基本通信語(yǔ)言或協(xié)議。在私網(wǎng)中,它也被用作通信協(xié)議。當(dāng)你直接網(wǎng)絡(luò)連接時(shí),你的計(jì)算機(jī)應(yīng)提供一個(gè)TCP/IP程序的副本,此時(shí)接收你所發(fā)送的信息的計(jì)算機(jī)也應(yīng)有一個(gè)TCP/IP程序的副本。 </p><p> TCP/IP是一個(gè)兩層的
10、程序。高層為傳輸控制協(xié)議,它負(fù)責(zé)聚集信息或把文件拆分成更小的包。這些包通過(guò)網(wǎng)絡(luò)傳送到接收端的TCP層,接收端的TCP層把包還原為原始文件。低層是網(wǎng)際協(xié)議,它處理每個(gè)包的地址部分,使這些包正確的到達(dá)目的地。網(wǎng)絡(luò)上的網(wǎng)關(guān)計(jì)算機(jī)根據(jù)信息的地址來(lái)進(jìn)行路由選擇。即使來(lái)自同一文件的分包路由也有可能不同,但最后會(huì)在目的地匯合。 TCP/IP使用客戶端/服務(wù)器模式進(jìn)行通信。TCP/IP通信是點(diǎn)對(duì)點(diǎn)的,意思是通信是網(wǎng)絡(luò)中的一臺(tái)主機(jī)與另一臺(tái)主機(jī)之間的。TC
11、P/IP與上層應(yīng)用程序之間可以說(shuō)是“沒(méi)有國(guó)籍的”,因?yàn)槊總€(gè)客戶請(qǐng)求都被看做是與上一個(gè)請(qǐng)求無(wú)關(guān)的。正是它們之間的“無(wú)國(guó)籍的”釋放了網(wǎng)絡(luò)路徑,才是每個(gè)人都可以連續(xù)不斷的使用網(wǎng)絡(luò)。 許多用戶熟悉使用TCP/IP協(xié)議的高層應(yīng)用協(xié)議。包括萬(wàn)維網(wǎng)的超文本傳輸協(xié)議(HTTP),文件傳輸協(xié)議(FTP),遠(yuǎn)程網(wǎng)絡(luò)訪問(wèn)協(xié)議(Telnet)和簡(jiǎn)單郵件傳輸協(xié)議(SMTP)。這些協(xié)議通常和TCP/IP協(xié)議打包在一起。 使用模擬電話調(diào)制解調(diào)器連接網(wǎng)絡(luò)的個(gè)人電腦通常
12、是使用串行線路接口協(xié)議(SLIP)和點(diǎn)對(duì)點(diǎn)協(xié)議(P2P)。這些協(xié)議壓縮IP包后通過(guò)撥號(hào)電話線發(fā)送</p><p> 2.socket協(xié)議</p><p> (1).什么是socket</p><p> Socket,簡(jiǎn)稱套接字,用于實(shí)現(xiàn)網(wǎng)絡(luò)上客戶和服務(wù)器之間的連接。也就是說(shuō)網(wǎng)絡(luò)上兩個(gè)或兩個(gè)以上雙工方式通信的進(jìn)程之間總有一個(gè)連接,這個(gè)連接的端點(diǎn)成為套接字,套接字
13、是在比較低的層次上通信的。</p><p> 具體的說(shuō):一個(gè)服務(wù)器應(yīng)用程序一般偵聽一個(gè)特定的端口等待客戶端的連接請(qǐng)求,當(dāng)一個(gè)連接請(qǐng)求到達(dá)時(shí),客戶端和服武器端建立一個(gè)通信連接,在連接過(guò)程中,客戶端被分配一個(gè)本地端口與一個(gè)socket建立連接,客戶端通過(guò)寫socket來(lái)通知服務(wù)器,以讀socket中的信息,類似的服務(wù)器也獲得一個(gè)本地端口,它需要一個(gè)新的端口號(hào)來(lái)偵聽原始端口上的其他連接請(qǐng)求。服務(wù)器也通過(guò)它的本地端口連
14、接一個(gè)socket,通過(guò)讀寫和客戶端通信。</p><p> (2).Socket程序的工作過(guò)程:</p><p> 1、建立Socket連接:在通信開始之前由通信雙方確認(rèn)身份,建立一條專用的虛擬連接通道。</p><p> 2、數(shù)據(jù)通信:利用虛擬連接通道傳送數(shù)據(jù)信息進(jìn)行通道。</p><p> 3、關(guān)閉:通信結(jié)束時(shí),再將所建的虛擬連
15、接拆除。</p><p><b> 具體如下:</b></p><p><b> 服務(wù)器</b></p><p><b> 三次握手:</b></p><p> 第一次握手:原主機(jī)發(fā)送一個(gè)帶有本次連接的序號(hào)的請(qǐng)求的一個(gè)數(shù)據(jù)幀</p><p>
16、第二次握手:目的主機(jī)收到請(qǐng)求后,如果同意連接,則發(fā)回一個(gè)帶有一個(gè)本次連接序號(hào)和源端機(jī)連接序列號(hào)的確認(rèn)。</p><p> 第三此握手:源端機(jī)收到含有兩次初始序列號(hào)的應(yīng)答后,在向目的主機(jī)發(fā)送一個(gè)帶有兩次連接的序列號(hào)的確認(rèn)。</p><p><b> 具體過(guò)程如下:</b></p><p> (3).如何開發(fā)一個(gè)Server-Client模型
17、的程序</p><p><b> 開發(fā)原理: </b></p><p> 服務(wù)器端,使用ServerSocket監(jiān)聽指定的端口,端口可以隨意指定(由于1024以下的端口通常屬于保留端口,在一些操作系統(tǒng)中不可以隨意使用,所以建議使用大于1024的端口),等待客戶連接請(qǐng)求,客戶連接后,會(huì)話產(chǎn)生;在完成會(huì)話后,關(guān)閉連接。 </p><p> 客
18、戶端,使用Socket對(duì)網(wǎng)絡(luò)上某一個(gè)服務(wù)器的某一個(gè)端口發(fā)出連接請(qǐng)求,一旦連接成功,打開會(huì)話;會(huì)話完成后,關(guān)閉Socket??蛻舳瞬恍枰付ù蜷_的端口,通常臨時(shí)的、動(dòng)態(tài)的分配一個(gè)1024以上的端口。 </p><p> Socket接口是TCP/IP網(wǎng)絡(luò)的API,Socket接口定義了許多函數(shù)或例程,程序員可以用它們來(lái)開發(fā)TCP/IP網(wǎng)絡(luò)上的應(yīng)用程序。要學(xué)Internet上的TCP/IP網(wǎng)絡(luò)編程,必須理解Sock
19、et接口。 Socket接口設(shè)計(jì)者最先是將接口放在Unix操作系統(tǒng)里面的。如果了解Unix系統(tǒng)的輸入和輸出的話,就很容易了解Socket了。網(wǎng)絡(luò)的Socket數(shù)據(jù)傳輸是一種特殊的I/O,Socket也是一種文件描述符。Socket也具有一個(gè)類似于打開文件的函數(shù)調(diào)用Socket(),該函數(shù)返回一個(gè)整型的Socket描述符,隨后的連接建立、數(shù)據(jù)傳輸?shù)炔僮鞫际峭ㄟ^(guò)該Socket實(shí)現(xiàn)的。</p><p><b>
20、; 3. Java</b></p><p> Java,是由Sun Microsystems公司于1995年5月推出的Java程序設(shè)計(jì)語(yǔ)言和Java平臺(tái)的總稱。用Java實(shí)現(xiàn)的HotJava瀏覽器(支持Java applet)顯示了Java的魅力:跨平臺(tái)、動(dòng)態(tài)的Web、Internet計(jì)算。從此,Java被廣泛接受并推動(dòng)了Web的迅速發(fā)展,常用的瀏覽器現(xiàn)在均支持Java applet。</p
21、><p> (1)java平臺(tái)構(gòu)架</p><p> Java平臺(tái)由Java虛擬機(jī)(Java Virtual Machine)和Java 應(yīng)用編程接口(Application Programming Interface、簡(jiǎn)稱API)構(gòu)成。Java 應(yīng)用編程接口為Java應(yīng)用提供了一個(gè)獨(dú)立于操作系統(tǒng)的標(biāo)準(zhǔn)接口,可分為基本部分和擴(kuò)展部分。在硬件或操作系統(tǒng)平臺(tái)上安裝一個(gè)Java平臺(tái)之后,Java
22、應(yīng)用程序就可運(yùn)行?,F(xiàn)在Java平臺(tái)已經(jīng)嵌入了幾乎所有的操作系統(tǒng)。這樣Java程序可以只編譯一次,就可以在各種系統(tǒng)中運(yùn)行。Java應(yīng)用編程接口已經(jīng)從1.1x版發(fā)展到1.2版。目前常用的Java平臺(tái)基于Java1.5,最近版本為Java1.7。 </p><p> Java分為三個(gè)體系JavaSE(Java2 Platform Standard Edition,java平臺(tái)標(biāo)準(zhǔn)版),JavaEE(Java 2 Pl
23、atform,Enterprise Edition,java平臺(tái)企業(yè)版),JavaME(Java 2 Platform Micro Edition,java平臺(tái)微型版)。 </p><p> * Java SE(Java Platform,Standard Edition)。Java SE 以前稱為 J2SE。它允許開發(fā)和部署在桌面、服務(wù)器、嵌入式環(huán)境和實(shí)時(shí)環(huán)境中使用的 Java 應(yīng)用程序。Java SE 包含
24、了支持 Java Web 服務(wù)開發(fā)的類,并為 Java Platform,Enterprise Edition(Java EE)提供基礎(chǔ)。 </p><p> * Java EE(Java Platform,Enterprise Edition)。這個(gè)版本以前稱為 J2EE。企業(yè)版本幫助開發(fā)和部署可移植、健壯、可伸縮且安全的服務(wù)器端 Java 應(yīng)用程序。Java EE 是在 Java SE 的基礎(chǔ)上構(gòu)建的,它提
25、供 Web 服務(wù)、組件模型、管理和通信 API,可以用來(lái)實(shí)現(xiàn)企業(yè)級(jí)的面向服務(wù)體系結(jié)構(gòu)(service-oriented architecture,SOA)和 Web 2.0 應(yīng)用程序。 </p><p> * Java ME(Java Platform,Micro Edition)。這個(gè)版本以前稱為 J2ME。Java ME 為在移動(dòng)設(shè)備和嵌入式設(shè)備(比如手機(jī)、PDA、電視機(jī)頂盒和打印機(jī))上運(yùn)行的應(yīng)用程序提供一
26、個(gè)健壯且靈活的環(huán)境。Java ME 包括靈活的用戶界面、健壯的安全模型、許多內(nèi)置的網(wǎng)絡(luò)協(xié)議以及對(duì)可以動(dòng)態(tài)下載的連網(wǎng)和離線應(yīng)用程序的豐富支持。基于 Java ME 規(guī)范的應(yīng)用程序只需編寫一次,就可以用于許多設(shè)備,而且可以利用每個(gè)設(shè)備的本機(jī)功能。</p><p> (2)Java與C/C++的差異 </p><p> 熟悉C語(yǔ)言和C++語(yǔ)言的讀者一定想搞清楚這個(gè)問(wèn)題,實(shí)際上,Java確實(shí)是
27、從C語(yǔ)言和C++語(yǔ)言繼承了許多成份,甚至可以將Java看成是類C語(yǔ)言發(fā)展和衍生的產(chǎn)物。比如Java語(yǔ)言的變量聲明,操作符形式,參數(shù)傳遞,流程控制等方面和C語(yǔ)言,C++語(yǔ)言完全相同。盡管如此,Java和C語(yǔ)言,C++語(yǔ)言又有許多差別,主要表現(xiàn)在如下幾個(gè)方面: </p><p> (1) Java中對(duì)內(nèi)存的分配是動(dòng)態(tài)的,它采用面向?qū)ο蟮臋C(jī)制,采用運(yùn)算符new為每個(gè)對(duì)象分配內(nèi)存空間,而且,實(shí)際內(nèi)存還會(huì)隨程序運(yùn)行情況而
28、改變。程序運(yùn)行中,每個(gè), Java系統(tǒng)自動(dòng)對(duì)內(nèi)存進(jìn)行掃描,對(duì)長(zhǎng)期不用的空間作為”垃圾”進(jìn)行收集,使得系統(tǒng)資源得到更充分地利用。按照這種機(jī)制,程序員不必關(guān)注內(nèi)存管理問(wèn)題,這使Java程序的編寫變得簡(jiǎn)單明了,并且避免了了由于內(nèi)存管理方面的差錯(cuò)而導(dǎo)致系統(tǒng)出問(wèn)題。而C語(yǔ)言通過(guò)malloc()和free()這兩個(gè)庫(kù)函數(shù)來(lái)分別實(shí)現(xiàn)分配內(nèi)在和釋放內(nèi)存空間的,C++語(yǔ)言中則通過(guò)運(yùn)算符new和delete來(lái)分配和釋放內(nèi)存。在C和C++這仲機(jī)制中,程序員必
29、須非常仔細(xì)地處理內(nèi)存的使用問(wèn)題。一方面,如果對(duì)己釋放的內(nèi)存再作釋放或者對(duì)未曾分配的內(nèi)存作釋放,都會(huì)造成死機(jī);而另一方面,如果對(duì)長(zhǎng)期不用的或不再使用的內(nèi)存不釋放,則會(huì)浪費(fèi)系統(tǒng)資源,甚至因此造成資源枯竭.。</p><p> (2) Java不在所有類之外定義全局變量,而是在某個(gè)類中定義一種公用靜態(tài)的變量來(lái)完成全局變量的功能。</p><p> (3) Java不用goto語(yǔ)句,而是用tr
30、y-catch-finally異常處理語(yǔ)句來(lái)代替goto語(yǔ)句處理出錯(cuò)的功能。</p><p> (4) Java不支持頭文件,而C和C++語(yǔ)言中都用頭文件來(lái)定義類的原型,全局變量,庫(kù)函數(shù)等,這種采用頭文件的結(jié)構(gòu)使得系統(tǒng)的運(yùn)行維護(hù)相當(dāng)繁雜。</p><p> (5) Java不支持宏定義,而是使用關(guān)鍵字final來(lái)定義常量,在C++中則采用宏定義來(lái)實(shí)現(xiàn)常量定義,這不利于程序的可讀性。&l
31、t;/p><p> (6) Java對(duì)每種數(shù)據(jù)類型都分配固定長(zhǎng)度.比如,在Java中,int類型總是32位的,而在C和C++中,對(duì)于不同的平臺(tái),同一個(gè)數(shù)據(jù)類型分配不同的字節(jié)數(shù),同樣是int類型,在PC機(jī)中為二字節(jié)即16位,而在VAX-11中,則為32位.這使得C語(yǔ)言造成不可移植性,而Java則具有跨平臺(tái)性(平臺(tái)無(wú)關(guān)性)。</p><p> (7) 類型轉(zhuǎn)換不同.在C和C++中,可通過(guò)指針進(jìn)
32、行任意的類型轉(zhuǎn)換,常常帶來(lái)不安全性,而在Java中,運(yùn)行時(shí)系統(tǒng)對(duì)對(duì)象的處理要進(jìn)行類型相容性檢查,以防止不安全的轉(zhuǎn)換。</p><p> (8) 結(jié)構(gòu)和聯(lián)合的處理.在C和C++中,結(jié)構(gòu)和聯(lián)合的所有成員均為公有,這就帶來(lái)了安全性問(wèn)題,而在Java中根本就不包含結(jié)構(gòu)和聯(lián)合,所有的內(nèi)容都封裝在類里面。 </p><p> (9) Java不再使用指針.指針是C和C++中最靈活,也最容易產(chǎn)生錯(cuò)誤
33、的數(shù)據(jù)類型.由指針?biāo)M(jìn)行的內(nèi)存地址操作常會(huì)造成不可預(yù)知的錯(cuò)誤,同時(shí)通過(guò)指針對(duì)某個(gè)內(nèi)存地址進(jìn)行顯式類型轉(zhuǎn)換后,可以訪問(wèn)一個(gè)C++中的私有成員,從而破壞安全性。而Java對(duì)指針進(jìn)行完全地控制,程序員不能直接進(jìn)行任何指針操作。</p><p><b> 四.課題實(shí)現(xiàn)</b></p><p><b> 1.方案介紹</b></p>&l
34、t;p> 所謂socket通常也稱作"套接字",用于描述IP地址和端口,是一個(gè)通信鏈的句柄。應(yīng)用程序通常通過(guò)"套接字"向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求。 </p><p> 以J2SDK-1.3為例,Socket和ServerSocket類庫(kù)位于java.net包中。ServerSocket用于服務(wù)器端,Socket是建立網(wǎng)絡(luò)連接時(shí)使用的。在連接成功時(shí),應(yīng)用程序兩端
35、都會(huì)產(chǎn)生一個(gè)Socket實(shí)例,操作這個(gè)實(shí)例,完成所需的會(huì)話。對(duì)于一個(gè)網(wǎng)絡(luò)連接來(lái)說(shuō),套接字是平等的,并沒(méi)有差別,不因?yàn)樵诜?wù)器端或在客戶端而產(chǎn)生不同級(jí)別。不管是Socket還是ServerSocket它們的工作都是通過(guò)SocketImpl類及其子類完成的。 </p><p> .Accept方法用于產(chǎn)生"阻塞",直到接受到一個(gè)連接,并且返回一個(gè)客戶端的Socket對(duì)象實(shí)例。"阻塞&
36、quot;是一個(gè)術(shù)語(yǔ),它使程序運(yùn)行暫時(shí)"停留"在這個(gè)地方,直到一個(gè)會(huì)話產(chǎn)生,然后程序繼續(xù);通常"阻塞"是由循環(huán)產(chǎn)生的。 </p><p> getInputStream方法獲得網(wǎng)絡(luò)連接輸入,同時(shí)返回一個(gè)InputStream對(duì)象實(shí)例。 </p><p> getOutputStream方法連接的另一端將得到輸入,同時(shí)返回一個(gè)OutputStrea
37、m對(duì)象實(shí)例。 </p><p> 注意:其中g(shù)etInputStream和getOutputStream方法均會(huì)產(chǎn)生一個(gè)IOException,它必須被捕獲,因?yàn)樗鼈兎祷氐牧鲗?duì)象,通常都會(huì)被另一個(gè)流對(duì)象使用。</p><p><b> 詳細(xì)原理圖如下:</b></p><p> 由圖可知,程序包括服務(wù)器端和客戶端。</p>
38、<p> 服務(wù)器,使用ServerSocket監(jiān)聽指定的端口,端口可以隨意指定(由于1024以下的端口通常屬于保留端口,在一些操作系統(tǒng)中不可以隨意使用,所以建議使用大于1024的端口),等待客戶連接請(qǐng)求,客戶連接后,會(huì)話產(chǎn)生;在完成會(huì)話后,關(guān)閉連接。</p><p> 服務(wù)器端的程序界面如下: </p><p> 客戶端,使用Socket對(duì)網(wǎng)絡(luò)上某一個(gè)服務(wù)器的某一個(gè)端口發(fā)出
39、連接請(qǐng)求,一旦連接成功,打開會(huì)話;會(huì)話完成后,關(guān)閉Socket??蛻舳瞬恍枰付ù蜷_的端口,通常臨時(shí)的、動(dòng)態(tài)的分配一個(gè)8000口。 </p><p> 客戶端的程序界面如下:</p><p><b> 2.局域網(wǎng)的構(gòu)建</b></p><p> ?。?)計(jì)算機(jī)的名字 </p><p> 1. 在計(jì)算機(jī)的桌面上,右鍵
40、單擊“網(wǎng)上鄰居”。 </p><p> 2. 選擇“屬性”。 </p><p> 3. 單擊“標(biāo)識(shí)”選項(xiàng)卡。 </p><p> 4. 在“計(jì)算機(jī)名稱”框中可以找到計(jì)算機(jī)的名稱。 </p><p> (2)計(jì)算機(jī)的 IP地址</p><p> 1. 單擊“任務(wù)條”上的“啟動(dòng)”。 </p><
41、;p> 2. 選擇“運(yùn)行”。 </p><p> 3. 若服務(wù)器端操作系統(tǒng)為win95則在“打開”中填入“winipcfg”,若服務(wù)器端操作系統(tǒng)為winnt則在“打開”中填入“ipconfig”。 </p><p> 4. 按下“確定”鍵。 上面找到的計(jì)算機(jī)名稱或IP地址可以作為WinSock的RemoteHost 屬性的值。</p><p><b
42、> 五.實(shí)現(xiàn)結(jié)果:</b></p><p> 程序運(yùn)行之前,我們必須知道服務(wù)器端主機(jī)所在網(wǎng)絡(luò)的地址,我們學(xué)校大多數(shù)電腦使用使用的IP地址都是被隨機(jī)分配的,每次連接重新建立后,IP地址都可能不同,因此我們要查看服務(wù)器的本地IP地址。查看方式是在CMD界面中輸入ipconfig再回車,響應(yīng)為無(wú)線網(wǎng)絡(luò)的IP地址為172.17.32.9,子網(wǎng)掩碼為255.255.240.0,默認(rèn)網(wǎng)關(guān)為 58.
43、45.112.1,我們將得到的IP改寫入客戶端的相應(yīng)地方即可,打開程序后,服務(wù)器則處于監(jiān)聽狀態(tài),這時(shí)我們只要往客戶端發(fā)送端填入要發(fā)送的字符,再按發(fā)送鍵即可。演示效果如下圖所示。</p><p> 六.總結(jié)及心得體會(huì):</p><p> 一個(gè)星期下來(lái),把以前分散學(xué)習(xí)的計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)知識(shí)點(diǎn)系統(tǒng)地復(fù)習(xí)與應(yīng)用了一遍,并且能具體的用到了簡(jiǎn)單的網(wǎng)絡(luò)連接的實(shí)際問(wèn)題中去,順利地完成該課程設(shè)計(jì),收獲頗多
44、。</p><p> 通過(guò)該課程設(shè)計(jì),理解了Socket的基本概念工作原理,掌握Socket的建立、監(jiān)聽、連接、發(fā)送數(shù)據(jù)和接收數(shù)據(jù),對(duì)課本上的知識(shí)有了更深的理解,課本上的知識(shí)是機(jī)械的,表面的。通過(guò)實(shí)踐,上機(jī)實(shí)驗(yàn),和同學(xué)一起探討問(wèn)題,才在實(shí)驗(yàn)原理與作用上得到更多的體現(xiàn)。使用Java高級(jí)面向?qū)ο缶幊陶Z(yǔ)言編寫了一個(gè)網(wǎng)絡(luò)聊天程序。點(diǎn)對(duì)點(diǎn)通信在計(jì)算機(jī)上得到了實(shí)現(xiàn)。 </p><p> 計(jì)算機(jī)網(wǎng)
45、絡(luò)技術(shù)是一門實(shí)踐性和綜合性比較強(qiáng)的課程,平時(shí)的具體實(shí)踐時(shí)間與鍛煉機(jī)會(huì)太少,所以造成在課程設(shè)計(jì)中就出現(xiàn)了很多問(wèn)題,但只要認(rèn)真去實(shí)踐,依然會(huì)從中得到很大的收獲,問(wèn)題就會(huì)迎刃而解的了。</p><p><b> 七.參考書目:</b></p><p> 1.謝希仁 編著 《計(jì)算機(jī)網(wǎng)絡(luò)(第五版)》 電子工業(yè)出版社 </p><p> 2.印雯
46、 編著 《Java語(yǔ)言與面向?qū)ο蟪绦蛟O(shè)計(jì)》 清華大學(xué)出版社</p><p><b> 附一課題源代碼:</b></p><p><b> 服務(wù)器端代碼</b></p><p><b> /**</b></p><p><b> *服務(wù)器端</b>
47、</p><p><b> */</b></p><p> package QQ.Com;</p><p> import javax.swing.*;</p><p> import java.net.*;</p><p> import java.awt.event.ActionEv
48、ent;</p><p> import java.awt.event.ActionListener;</p><p> import java.io.*;</p><p> implements AcionListener</p><p> public class MyServer extends JFrame implement
49、s ActionListener{</p><p> JTextArea jta=null;</p><p> JTextField jtf=null;</p><p> JButton jb=null;</p><p> JScrollPane jsp=null;</p><p> JPanel jp1=n
50、ull;</p><p> PrintWriter pw=null;</p><p> public static void main(String[] args)</p><p><b> {</b></p><p> MyServer msv=new MyServer();</p><p&
51、gt;<b> }</b></p><p> public MyServer()</p><p><b> {</b></p><p> jta=new JTextArea();</p><p> jtf=new JTextField(20);</p><p>
52、jsp=new JScrollPane(jta);</p><p> jb=new JButton("發(fā)送");</p><p> jb.addActionListener(this);</p><p> jp1=new JPanel();</p><p> this.add(jsp,"Center&qu
53、ot;);</p><p> jp1.add(jtf);</p><p> jp1.add(jb);</p><p> this.add(jp1,"South");</p><p> this.setTitle("QQ簡(jiǎn)易聊天(服務(wù)器端)");</p><p> thi
54、s.setSize(400, 300);</p><p> this.setVisible(true);</p><p><b> try{</b></p><p> ServerSocket ss=new ServerSocket(8000);////服務(wù)器監(jiān)聽</p><p> Socket s=ss.ac
55、cept();</p><p> InputStreamReader isr=new InputStreamReader(s.getInputStream());</p><p> BufferedReader br=new BufferedReader(isr);</p><p> pw=new PrintWriter(s.getOutputStream()
56、,true);</p><p> while(true)</p><p><b> {</b></p><p> String info=br.readLine();//讀取信息</p><p> jta.append("客戶端對(duì)服務(wù)器說(shuō):"+info+"\r\n");&l
57、t;/p><p><b> }</b></p><p> }catch(Exception e){</p><p> e.printStackTrace();</p><p><b> }</b></p><p><b> }</b></
58、p><p> public void actionPerformed(ActionEvent e) {//如果按下發(fā)送按鈕</p><p> // TODO Auto-generated method stub</p><p> if(e.getSource()==jb)</p><p><b> {</b><
59、/p><p> String info=jtf.getText();</p><p> jta.append("服務(wù)器對(duì)客戶端說(shuō):"+info+"\r\n");</p><p> pw.println(info);</p><p> jtf.setText("");//清空發(fā)送文
60、本框</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 客戶端代碼</b></p><p><b> /**</b&
61、gt;</p><p><b> *服務(wù)器端</b></p><p><b> */</b></p><p> package QQ.Com;</p><p> import javax.swing.*;</p><p> import java.net.*;<
62、;/p><p> import java.awt.event.ActionEvent;</p><p> import java.awt.event.ActionListener;</p><p> import java.io.*;</p><p> public class MyClient extends JFrame implem
63、ents ActionListener {</p><p> JTextArea jta=null;</p><p> JTextField jtf=null;</p><p> JButton jb=null;</p><p> JScrollPane jsp=null;</p><p> JPanel j
64、p1=null;</p><p> PrintWriter pw=null;</p><p> public static void main(String[] args)</p><p><b> {</b></p><p> MyClient mct=new MyClient();</p>&l
65、t;p><b> }</b></p><p> public MyClient()</p><p><b> {</b></p><p> jta=new JTextArea();</p><p> jtf=new JTextField(20);</p><p&g
66、t; jsp=new JScrollPane(jta);</p><p> jb=new JButton("發(fā)送");</p><p> jb.addActionListener(this);</p><p> jp1=new JPanel();</p><p> this.add(jsp,"Cente
67、r");</p><p> jp1.add(jtf);</p><p> jp1.add(jb);</p><p> this.add(jp1,"South");</p><p> this.setTitle("QQ簡(jiǎn)易聊天(客戶端)");</p><p>
68、this.setSize(400, 300);</p><p> this.setVisible(true);</p><p><b> try{</b></p><p> Socket s=new Socket("172.17.32.9",8000);</p><p> InputStrea
69、mReader isr=new InputStreamReader(s.getInputStream());</p><p> BufferedReader br=new BufferedReader(isr);</p><p> pw=new PrintWriter(s.getOutputStream(),true);</p><p> while(true
70、)</p><p><b> {</b></p><p> String info=br.readLine();//讀取從服務(wù)器發(fā)來(lái)的信息</p><p> jta.append("服務(wù)器對(duì)客戶端說(shuō):"+info+"\r\n");</p><p><b> }&l
71、t;/b></p><p> }catch(Exception e){</p><p> e.printStackTrace();</p><p><b> }</b></p><p><b> }</b></p><p> public void act
72、ionPerformed(ActionEvent e) {</p><p> // TODO Auto-generated method stub</p><p> if(e.getSource()==jb)</p><p><b> {</b></p><p> String info=jtf.getText(
73、);</p><p> jta.append("客戶端對(duì)服務(wù)器說(shuō):"+info+"\r\n");</p><p> pw.println(info);</p><p><b> }</b></p><p><b> }</b></p>&
74、lt;p><b> }</b></p><p> 附二網(wǎng)線水晶頭的解法:</p><p> 網(wǎng)線水晶頭一般說(shuō)來(lái)有兩種做法標(biāo)準(zhǔn),這兩種標(biāo)準(zhǔn)分別為 TIA/EIA 568B 和 TIA/EIA 568A 電腦自動(dòng)關(guān)機(jī)。制作水晶頭首先將水晶頭有卡的一面向下,有銅片的一面朝上,有開口的一方朝向自己身體,從
75、左至右排序?yàn)?#160;12345678 ,我們學(xué)習(xí)的是是 TIA/EIA 568B 網(wǎng)線線序:TIA/EIA-568B: 1、白橙,2、橙,3、白綠,4、藍(lán),5、白藍(lán),6、綠,7、白棕,8、棕。</p><p> 在整個(gè)網(wǎng)絡(luò)布線中應(yīng)用一種布線方式,但兩端都有RJ-45 plug 的網(wǎng)絡(luò)聯(lián)線無(wú)論是采用端接方式A,還是端接方式B, 在
76、網(wǎng)絡(luò)中都是通用的。雙絞線的順序與RJ45頭的引腳序號(hào)--對(duì)應(yīng)。</p><p> 10M 以太網(wǎng)的網(wǎng)線接法使用1,2,3,6編號(hào)的芯線傳遞數(shù)據(jù),100M以太網(wǎng)的網(wǎng)線使用4,5,7,8編號(hào)的芯線傳遞數(shù)據(jù)。為何現(xiàn)在都采用4對(duì)(8芯線)的雙 絞線呢?這主要是為適應(yīng)更多的使用范圍,在不變換基礎(chǔ)設(shè)施的前提下,就可滿足各式各樣的用戶設(shè)備的網(wǎng)線接線要求電腦配置。例如,我們可同時(shí)用其中一對(duì)絞線來(lái)實(shí)現(xiàn)語(yǔ)音通訊。 <
溫馨提示
- 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. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計(jì)--基于tcp的計(jì)算機(jī)通信工具編程實(shí)現(xiàn)
- 課程設(shè)計(jì)--基于tcp的計(jì)算機(jī)通信工具編程實(shí)現(xiàn)
- 課程設(shè)計(jì)---通信系統(tǒng)的計(jì)算機(jī)仿真設(shè)計(jì)
- 校園計(jì)算機(jī)通信網(wǎng)課程設(shè)計(jì)
- 課程設(shè)計(jì)---遠(yuǎn)程登錄的計(jì)算機(jī)實(shí)現(xiàn)
- 計(jì)算機(jī)組成原理課程設(shè)計(jì)-- 模型計(jì)算機(jī)的設(shè)計(jì)與實(shí)現(xiàn)
- 利用socket實(shí)現(xiàn)雙機(jī)通信(計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì))
- 計(jì)算機(jī)組成原理課程設(shè)計(jì)——模型計(jì)算機(jī)的設(shè)計(jì)與實(shí)現(xiàn)
- 數(shù)字通信計(jì)算機(jī)仿真課程設(shè)計(jì)報(bào)告
- 計(jì)算機(jī)原理課程設(shè)計(jì)
- 計(jì)算機(jī)課程設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)與通信課程設(shè)計(jì)
- 計(jì)算機(jī)組成原理課程設(shè)計(jì)---簡(jiǎn)單計(jì)算機(jī)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- 計(jì)算機(jī)組成原理課程設(shè)計(jì)--簡(jiǎn)單計(jì)算機(jī)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- 計(jì)算機(jī)組成原理課程設(shè)計(jì)---簡(jiǎn)單計(jì)算機(jī)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- 計(jì)算機(jī)組成原理課程設(shè)計(jì)--簡(jiǎn)單計(jì)算機(jī)的設(shè)計(jì)
- 計(jì)算機(jī)硬件課程設(shè)計(jì)報(bào)告---簡(jiǎn)單計(jì)算機(jī)的設(shè)計(jì)
- 《計(jì)算機(jī)原理》網(wǎng)絡(luò)課程設(shè)計(jì)與實(shí)現(xiàn).pdf
- 計(jì)算機(jī)組成原理課程設(shè)計(jì)---簡(jiǎn)單計(jì)算機(jī)的設(shè)計(jì)
- 潮流計(jì)算的計(jì)算機(jī)算法課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論