【正文】
隨著時(shí)代的進(jìn)步,互聯(lián)網(wǎng)日益變得普及和大眾化。當(dāng)今社會(huì),互聯(lián)網(wǎng)幾乎覆蓋了所有行業(yè),由此可見,其在我們的日常生活中所占的地位是顯而易見的。而網(wǎng)絡(luò)能帶給我們的是什么呢?當(dāng)然是時(shí)效性。通過網(wǎng)絡(luò),我們可以很輕松的和地球那端的人取得聯(lián)系。而這個(gè)“聯(lián)系方式”又有很多種了,比如郵件、文字會(huì)話、語音會(huì)話、視屏?xí)挼?。眾所周知的,擁有上億的注冊(cè)用戶,在國(guó)內(nèi)即時(shí)通訊領(lǐng)域占據(jù)了第一的位置,因?yàn)槠渚哂袕?qiáng)大的功能,可以實(shí)現(xiàn)文字通訊、語音通訊甚至即時(shí)的視屏通訊。除此之外,還有諸如微軟的MSN、網(wǎng)易的POPO,新浪UC等等。本次畢業(yè)設(shè)計(jì)的內(nèi)容是基于Java的一款局域網(wǎng)即時(shí)通信軟件。Java是一種跨平臺(tái)的編程語言,其具有的良好的網(wǎng)絡(luò)功能以及對(duì)數(shù)據(jù)庫的全面支持毫無疑問能實(shí)現(xiàn)本次設(shè)計(jì)的所有內(nèi)容。本系統(tǒng)采用C/S模式,即客戶端/服務(wù)器模式,客戶端與服務(wù)器通過Socket傳遞數(shù)據(jù),服務(wù)器采用多線程技術(shù)。利用Eclipse進(jìn)行開發(fā)。該軟件完成后的主要功能有:點(diǎn)對(duì)點(diǎn)、點(diǎn)對(duì)多、多對(duì)多的聊天,服務(wù)器對(duì)聊天進(jìn)行統(tǒng)一管理,比如用戶注冊(cè),用戶登陸,踢出用戶等。關(guān)鍵字:Java,Socket,多線程,TCP/UDP,C/S一、前言當(dāng)今人們每天依賴著的網(wǎng)絡(luò),主要是給廣大用戶提供了即時(shí)性的信息。網(wǎng)絡(luò)通信則是實(shí)現(xiàn)人與人之間交互性溝通最好的方式,我們可以通過網(wǎng)絡(luò)通信實(shí)現(xiàn)異地文字傳輸、語音通話甚至遠(yuǎn)程視頻通話?,F(xiàn)在很多公司企業(yè)都進(jìn)行遠(yuǎn)程視頻會(huì)議。網(wǎng)絡(luò)通信無疑給當(dāng)今的人們帶來了極大的便利。諸如騰訊、微軟的MSN、網(wǎng)易的POPO,新浪UC等眾多出類拔萃的聊天系統(tǒng),給我們生活所帶來的時(shí)效性、便利性是有目共睹的。于是,本人懷著對(duì)網(wǎng)絡(luò)通信機(jī)制以及原理的極大興趣嘗試?yán)肑ava語言編寫一個(gè)微型的局域網(wǎng)聊天軟件,可以供多人在一個(gè)局域網(wǎng)中同時(shí)進(jìn)行聊天通信。本課題主要是基于Java這種跨平臺(tái)的編程語言,利用SQL Server 2005 數(shù)據(jù)庫進(jìn)行編寫。通過JDBC將Java和數(shù)據(jù)庫連接起來,從而,我們可以用Java來操作數(shù)據(jù)庫。本課題內(nèi)容主要是應(yīng)用數(shù)據(jù)庫來存儲(chǔ)用戶信息以及用戶聊天記錄,所以相對(duì)于其他大型的應(yīng)用,操作起來比較簡(jiǎn)單。本次畢業(yè)設(shè)計(jì)所設(shè)計(jì)的聊天系統(tǒng)應(yīng)用了C/S(客戶端/服務(wù)器)模式,這也是軟件開發(fā)中一種通用的開發(fā)模式。利用Socket進(jìn)行通信,這也是該聊天系統(tǒng)的關(guān)鍵部分。利用Java中的多線程技術(shù)來實(shí)現(xiàn)分工明確的操作。最后實(shí)現(xiàn)局域網(wǎng)即時(shí)通訊功能。二、正文關(guān)于TCPTCP (Transmission Control Protocol)和UDP(User Datagram Protocol)協(xié)議屬于傳輸層協(xié)議。其中TCP提供IP環(huán)境下的數(shù)據(jù)可靠傳輸,它提供的服務(wù)包括數(shù)據(jù)流傳送、可靠性、有效流控、全雙工操作和多路復(fù)用。通過面向連接、端到端和可靠的數(shù)據(jù)包發(fā)送。通俗說,它是事先為所發(fā)送的數(shù)據(jù)開辟出連接好的通道,然后再進(jìn)行數(shù)據(jù)發(fā)送;而UDP則不為IP提供可靠性、流控或差錯(cuò)恢復(fù)功能。一般來說,TCP對(duì)應(yīng)的是可靠性要求高的應(yīng)用,而UDP對(duì)應(yīng)的則是可靠性要求低、傳輸經(jīng)濟(jì)的應(yīng)用。TCP支持的應(yīng)用協(xié)議主要有:Telnet、FTP、SMTP等;UDP支持的應(yīng)用層協(xié)議主要有:NFS(網(wǎng)絡(luò)文件系統(tǒng))、SNMP(簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議)、DNS(主域名稱系統(tǒng))、TFTP(通用文件傳輸協(xié)議)等。面向連接的TCP“面向連接”就是在正式通信前必須要與對(duì)方建立起連接。比如你給別人打電話,必須等線路接通了、對(duì)方拿起話筒才能相互通話。TCP(Transmission Control Protocol,傳輸控制協(xié)議)是基于連接的協(xié)議,也就是說,在正式收發(fā)數(shù)據(jù)前,必須和對(duì)方建立可靠的連接。一個(gè)TCP連接必須要經(jīng)過三次“對(duì)話”才能建立起來,其中的過程非常復(fù)雜。我們來看看這三次對(duì)話的簡(jiǎn)單過程:主機(jī)A向主機(jī)B發(fā)出連接請(qǐng)求數(shù)據(jù)包:“我想給你發(fā)數(shù)據(jù),可以嗎?”,這是第一次對(duì)話;主機(jī)B向主機(jī)A發(fā)送同意連接和要求同步(同步就是兩臺(tái)主機(jī)一個(gè)在發(fā)送,一個(gè)在接收,協(xié)調(diào)工作)的數(shù)據(jù)包:“可以,你什么時(shí)候發(fā)?”,這是第二次對(duì)話;主機(jī)A再發(fā)出一個(gè)數(shù)據(jù)包確認(rèn)主機(jī)B的要求同步:“我現(xiàn)在就發(fā),你接著吧!”,這是第三次對(duì)話。三次“對(duì)話”的目的是使數(shù)據(jù)包的發(fā)送和接收同步,經(jīng)過三次“對(duì)話”之后,主機(jī)A才向主機(jī)B正式發(fā)送數(shù)據(jù)。TCP協(xié)議能為應(yīng)用程序提供可靠的通信連接,使一臺(tái)計(jì)算機(jī)發(fā)出的字節(jié)流無差錯(cuò)地發(fā)往網(wǎng)絡(luò)上的其他計(jì)算機(jī),對(duì)可靠性要求高的數(shù)據(jù)通信系統(tǒng)往往使用TCP協(xié)議傳輸數(shù)據(jù)。面向非連接的UDP協(xié)議“面向非連接”就是在正式通信前不必與對(duì)方先建立連接,不管對(duì)方狀態(tài)就直接發(fā)送。這與現(xiàn)在風(fēng)行的手機(jī)短信非常相似:你在發(fā)短信的時(shí)候,只需要輸入對(duì)方手機(jī)號(hào)就OK了。UDP(User Data Protocol,用戶數(shù)據(jù)報(bào)協(xié)議)是與TCP相對(duì)應(yīng)的協(xié)議。它是面向非連接的協(xié)議,它不與對(duì)方建立連接,而是直接就把數(shù)據(jù)包發(fā)送過去!UDP適用于一次只傳送少量數(shù)據(jù)、對(duì)可靠性要求不高的應(yīng)用環(huán)境。比如,我們經(jīng)常使用“ping”命令來測(cè)試兩臺(tái)主機(jī)之間TCP/IP通信是否正常,其實(shí)“ping”命令的原理就是向?qū)Ψ街鳈C(jī)發(fā)送UDP數(shù)據(jù)包,然后對(duì)方主機(jī)確認(rèn)收到數(shù)據(jù)包,如果數(shù)據(jù)包是否到達(dá)的消息及時(shí)反饋回來,那么網(wǎng)絡(luò)就是通的。例如,在默認(rèn)狀態(tài)下,一次“ping”操作發(fā)送4個(gè)數(shù)據(jù)包,發(fā)送的數(shù)據(jù)包數(shù)量是4包,收到的也是4包(因?yàn)閷?duì)方主機(jī)收到后會(huì)發(fā)回一個(gè)確認(rèn)收到的數(shù)據(jù)包)。這充分說明了UDP協(xié)議是面向非連接的協(xié)議,沒有建立連接的過程。正因?yàn)閁DP協(xié)議沒有連接的過程,所以它的通信效率高;但也正因?yàn)槿绱?,它的可靠性不如TCP協(xié)議高。就使用UDP發(fā)消息,因此有時(shí)會(huì)出現(xiàn)收不到消息的情況。關(guān)于Socket在網(wǎng)絡(luò)上的兩個(gè)程序通過一個(gè)雙向的通信連接實(shí)現(xiàn)數(shù)據(jù)的交換,這個(gè)雙向的鏈路的一段稱為一個(gè)Socket。Socket通常用來實(shí)現(xiàn)客戶方和服務(wù)方的連接。Socket是TCP/IP協(xié)議的一個(gè)十分流行的編程界面,一個(gè)Socket通常由一個(gè)IP地址和一個(gè)端口號(hào)唯一確定。Socket所支持的協(xié)議不光有TCP/IP,比如UDP。在Java環(huán)境下,Socket編程主要是基于TCP/IP協(xié)議的網(wǎng)絡(luò)編程。也就是說在Java環(huán)境下,我們事先TCP/IP協(xié)議的網(wǎng)絡(luò)編程需要采用Socket機(jī)制。多線程進(jìn)程是一個(gè)具體的應(yīng)用程序,而線程是進(jìn)程中的一個(gè)分支,它是為了單獨(dú)完成程序中的某一項(xiàng)或一組功能而存在的。那么,我們?cè)谝粋€(gè)程序中要實(shí)現(xiàn)的功能就可以劃分為多個(gè)線程來分別實(shí)現(xiàn),這大大降低了一個(gè)程序的復(fù)雜性,也提高了程序的處理效率。在本課題中引入多線程技術(shù)無疑顯得是非常必要的,那么通信過程中的許多功能就可以用多個(gè)線程來實(shí)現(xiàn),從而做到分工明確,改善程序的執(zhí)行效率。C/S模式C/S模式是一種兩層結(jié)構(gòu)的系統(tǒng),第一層在客戶機(jī)上安裝了客戶機(jī)應(yīng)用程序,第二層在服務(wù)器上安裝服務(wù)器管理程序。在C/S模式的工作過程中,客戶機(jī)程序發(fā)出請(qǐng)求,服務(wù)器程序接收并且處理客戶機(jī)程序提出的請(qǐng)求,然后返回結(jié)果。C/S模式有以下特點(diǎn): C/S模式將客戶端與服務(wù)分離,系統(tǒng)具有穩(wěn)定性和靈活性的特點(diǎn)。 C/S模式配備的是點(diǎn)對(duì)點(diǎn)的結(jié)構(gòu)模式,適用于局域網(wǎng),有可靠的安全性。 由于客戶端實(shí)現(xiàn)與服務(wù)器端的直接連接,沒有中間環(huán)節(jié),因此響應(yīng)速度快。 在C/S模式中,作為客戶機(jī)的計(jì)算機(jī)都要安裝客戶機(jī)程序,一旦軟件系統(tǒng)升級(jí),每臺(tái)客戶機(jī)都要安裝客戶機(jī)程序,系統(tǒng)升級(jí)和維護(hù)較為復(fù)雜。三、總結(jié)TCP是一個(gè)“可靠的”、面向連接的傳輸機(jī)制,它提供一種可靠的字節(jié)流保證數(shù)據(jù)完整、無損并且按順序到達(dá)。TCP盡量連續(xù)不斷的測(cè)試網(wǎng)絡(luò)的負(fù)載并且控制發(fā)送數(shù)據(jù)的速度以避免網(wǎng)絡(luò)過載。另外,TCP試圖將數(shù)據(jù)按照規(guī)定的順序發(fā)送,這是與UDP不同之處,但這在實(shí)時(shí)數(shù)據(jù)流或者由高網(wǎng)絡(luò)層丟失率應(yīng)用的時(shí)候可能成為一個(gè)缺陷。UDP是一個(gè)無連接的數(shù)據(jù)報(bào)協(xié)議,它是一個(gè)“盡最大努力交付”或者“不可靠”的協(xié)議,不是因?yàn)樗貏e“不可靠”,而是因?yàn)樗粰z查數(shù)據(jù)包是否到達(dá)目的地,并且不保證它們按順序到達(dá)。如果一個(gè)程序需要這些特點(diǎn),它必須自己提供或者使用TCP。UDP的典型應(yīng)用是如流媒體(音頻和視頻等)這樣按時(shí)到達(dá)比可靠性更重要的應(yīng)用,或者如DNS查找這樣的簡(jiǎn)單查詢/響應(yīng)應(yīng)用,如果建立可靠的連接則所做的額外工作將是很多的。以上可以看出,TCP協(xié)議和UDP協(xié)議各有所長(zhǎng)、各有所短,適用于不同要求的通信環(huán)境。只要按照傳輸需求優(yōu)化選擇協(xié)議,那么,將會(huì)使傳輸達(dá)到我們所需要的效果。參考文獻(xiàn)[1] Elliotte Rusty Harold 著,朱濤江、林劍譯.《Java網(wǎng)絡(luò)編程(第三版)》.[2] 胡伏湘、雷軍環(huán).《Java程序設(shè)計(jì)實(shí)用教程(第二版)》.[3] 王家林.《》.[4] 王珊、薩師煊.《數(shù)據(jù)庫系統(tǒng)概論》.高等教育出版社. [5] 王意潔.《面向?qū)ο蟮臄?shù)據(jù)庫技術(shù)》.電子工業(yè)出版社.[6] 岳昆.《數(shù)據(jù)庫技術(shù):設(shè)計(jì)與應(yīng)用實(shí)例》. 清華大學(xué)出版社.2007[7] 余金山、林慧.《SQL Server 2000/2005 數(shù)據(jù)庫開發(fā)實(shí)例入門與提高》.北京: 電子工 [8] 結(jié)城浩 著,博碩文化 譯.《Java多線程設(shè)計(jì)模式》.[9] 李建成、郝筱松.《Java語言與面向?qū)ο蟪绦蛟O(shè)計(jì)》.西安交通大學(xué)出版 [10] 汪曉平、俞俊、李功.《精通Java網(wǎng)絡(luò)編程》.[11] 閆迎利.《Java網(wǎng)絡(luò)編程大講堂》.[12] 寇曉蕤、羅軍勇、蔡延榮.《網(wǎng)絡(luò)協(xié)議分析》.[13]Mark Bernett、Gene Oleynik. Uniform Communications Software Using TCP/IP. Presented at “Real Time Computer Applications in Nuclear, Particle, and Plasma Physics,” Williamsburg, Virginia, May1619, 1989[14]Arai、Masayuki. A tool for learning the programming style of Java. International Conference on Graphic and Image Processing (ICGIP 2012). Proceedings of the SPIE, Volume 8768, id. 87686D 5 pp. (2013)[15]Shaykhian、Gholam Ali. Java Programming Language. Kennedy Space Center ,April 26, 2007 [16]Tran Diepchi T、LawasGrodek Frances J、Dimond Robert P、Ivancic William D. SCPSTP, TCP, and RateBased Protocol Evaluation . Glenn Research Center,May 2005 66[17]Carter s. An Evaluation of UDP Transport Protocols. United States,Technical Report,2004 Dec 21[18] [19] [20] 廣告時(shí)間: 需要代碼以及使用方法的同學(xué)可以聯(lián)系, 751248314,童叟無欺,price Q議!以下是部分文件截圖,歡迎咨詢!...... 51