下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
精品文檔-下載后可編輯鑒于TCP的JavaSocket通信服務(wù)器1TCP與Socket[1]
在Internet的通信協(xié)議中,TCP/IP協(xié)議是一組至關(guān)重要的協(xié)議,TCP和UDP又是TCP/IP中兩個(gè)非常重要協(xié)議。TCP被稱為傳輸控制協(xié)議,它是面向連接的通信協(xié)議,采用TCP協(xié)議通信的兩臺(tái)計(jì)算機(jī)必須首先建立連接,然后再進(jìn)行數(shù)據(jù)傳送,最后釋放連接。TCP協(xié)議提供了端到端、全雙工通信模式,這種通信模式能保證為應(yīng)用程序提供可靠的、無(wú)差錯(cuò)的通信連接,使一臺(tái)計(jì)算機(jī)發(fā)出的字節(jié)流準(zhǔn)確無(wú)誤地發(fā)送到網(wǎng)絡(luò)中的其它計(jì)算機(jī),對(duì)可靠性要求高的數(shù)據(jù)通信系統(tǒng),一般采用TCP協(xié)議傳送數(shù)據(jù)。UDP被稱為用戶數(shù)據(jù)報(bào)協(xié)議,是與TCP相對(duì)應(yīng)的協(xié)議。它是面向無(wú)連接的協(xié)議,數(shù)據(jù)發(fā)送前不需要建立連接,而是直接就把數(shù)據(jù)包發(fā)送給接收方。
Socket被稱為套接字,在計(jì)算機(jī)網(wǎng)絡(luò)中以雙工方式通信的兩個(gè)進(jìn)程,總要保持一個(gè)連接,從而實(shí)現(xiàn)服務(wù)程序和客戶程序之間的穩(wěn)健通信,這兩個(gè)被連接的端點(diǎn)被稱為套接字。Socket通信就是兩個(gè)進(jìn)程之間基于TCP連接的、端到端的通信,這種通信是雙向的。TCP連接提供數(shù)據(jù)通信所需的字節(jié)流服務(wù),這種服務(wù)是可靠的,一方發(fā)出的字節(jié)流確保能夠到達(dá)對(duì)方并被接收,同時(shí)也能夠保證數(shù)據(jù)的完整性。
套接字主要負(fù)責(zé)兩個(gè)進(jìn)程之間的通信,客戶程序向套接字里寫(xiě)入連接請(qǐng)求和服務(wù)請(qǐng)求,然后服務(wù)器會(huì)接收連接請(qǐng)求,并處理這個(gè)請(qǐng)求,最后,服務(wù)器把處理結(jié)果寫(xiě)入套接字送回客戶程序。具體來(lái)說(shuō),一個(gè)Socket服務(wù)器應(yīng)用程序會(huì)監(jiān)聽(tīng)某一特定端口,等待Socket客戶程序的連接請(qǐng)求。當(dāng)一個(gè)連接請(qǐng)求到達(dá)時(shí),服務(wù)器和客戶就建立一個(gè)通信連接。在連接過(guò)程中,客戶被分配一個(gè)本地端口號(hào),并通過(guò)該端口與Socket連接,客戶通過(guò)讀寫(xiě)Socket與服務(wù)器交換數(shù)據(jù)信息,同樣,服務(wù)器也被分配一個(gè)新的端口號(hào),它需要通過(guò)這個(gè)新的端口號(hào),來(lái)繼續(xù)監(jiān)聽(tīng)原端口上的其它連接請(qǐng)求。服務(wù)器也給它的本地端口連接一個(gè)Socket,通過(guò)讀寫(xiě)它與客戶交換數(shù)據(jù)信息,以實(shí)現(xiàn)服務(wù)器和客戶機(jī)的通信目的。
目前,用戶可以使用兩類(lèi)套接字,即TCP協(xié)議采用的流套接字和UDP協(xié)議采用的數(shù)據(jù)報(bào)套接字。流套接字提供了雙向的、有序的、無(wú)重復(fù)并且無(wú)記錄邊界的數(shù)據(jù)流服務(wù)。數(shù)據(jù)報(bào)套接字支持雙向的數(shù)據(jù)流,但不保證是可靠的、有序的、無(wú)重復(fù)的。
2Socket通信工作原理[2]
Socket數(shù)據(jù)通信按照以下步驟進(jìn)行:首先,建立Socket連接。通信正式開(kāi)始之前,雙方必須相互確認(rèn)身份,在彼此認(rèn)可對(duì)方后,建立一條專用的Socket虛擬連接通道。其次,數(shù)據(jù)通信。利用Socket虛擬連接通道發(fā)送和接收數(shù)據(jù),從而實(shí)現(xiàn)服務(wù)器和客戶端的通信。最后,關(guān)閉連接。通信任務(wù)完成后,將所建立的Socket虛擬連接將被拆除,釋放系統(tǒng)資源。在Java面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言中,開(kāi)發(fā)包提供的ServerSocket類(lèi)和Socket類(lèi)及其方法,可實(shí)現(xiàn)上述操作。Socket工作原理如圖1所示,服務(wù)器端的通信進(jìn)程首先選擇一個(gè)端口號(hào),然后調(diào)用accept()方法對(duì)此端口進(jìn)行監(jiān)聽(tīng),等待客戶通信進(jìn)程提出連接申請(qǐng)??蛻舳送ㄐ胚M(jìn)程需要先創(chuàng)建Socket對(duì)象,在創(chuàng)建Socket對(duì)象時(shí),必須指定服務(wù)器端的地址和通信端口號(hào),這個(gè)地址和端口號(hào)必須與服務(wù)器監(jiān)端保持一致。如果客戶端的申請(qǐng)得到服務(wù)器端認(rèn)可后,雙方就建立了連接,那么服務(wù)器就利用accept()方法獲取得客戶端Socket對(duì)象,并通過(guò)該對(duì)象雙方進(jìn)行數(shù)據(jù)交換和數(shù)據(jù)通信。
3JavaSocket通信模型[3]
3.1建立Socket連接
首先,在服務(wù)器端創(chuàng)建一個(gè)ServerSocket類(lèi)的實(shí)例對(duì)象,該對(duì)象用于監(jiān)聽(tīng)客戶端的連接請(qǐng)求,代碼如下:ServerSocketserversocket;try{serversocket=newServerSocket(8888);}catch(Exceptionexcept){System.out.println("Errormessage:"+except);}在服務(wù)器端建立ServerSocket對(duì)象實(shí)例時(shí),必須使用try...catch語(yǔ)句進(jìn)行異常處理,以防止程序出錯(cuò)時(shí)能及時(shí)處理。在生成ServerSocket對(duì)象時(shí),必須選擇一個(gè)合法的端口號(hào),該端口號(hào)應(yīng)在1024和65535之間選擇,以免與常用服務(wù)程序的端口號(hào)發(fā)生沖突,上例中選用8888作為端口號(hào)。
其次,在服務(wù)器端調(diào)用ServerSocket類(lèi)的serversocket對(duì)象的accept()方法進(jìn)行監(jiān)聽(tīng),等待客戶端程序的連接請(qǐng)求。在連接請(qǐng)求到達(dá)之前,線程一直處于阻塞狀態(tài),當(dāng)一個(gè)連接請(qǐng)求到來(lái)時(shí),初始化連接Socket類(lèi)的socketobject對(duì)象,程序?qū)崿F(xiàn)如下:Socketsocketobject;try{socketobject=serversocket.accept();}catch(Exceptionexcept){System.out.println("Errormessage:"+except);}如果連接成功,accept方法將返回客戶端的socketobject對(duì)象實(shí)例。在一般情況下,通過(guò)必要的數(shù)據(jù)信息交換,將由另外的服務(wù)程序?qū)iT(mén)為該連接提供相應(yīng)的信息服務(wù),而serversocket對(duì)象實(shí)例將被釋放出來(lái),繼續(xù)監(jiān)聽(tīng)其它客戶端的連接請(qǐng)求。
最后,在客戶端建立一個(gè)Socket類(lèi)的socketobject對(duì)象,請(qǐng)求建立連接:Socketsockettobject;try{socketobject=newSocket("Serveraddress",8888);}catch(Exceptionexcept){System.out.println("Errormessage:"+except);}在客戶端建立Socket類(lèi)的socketobject對(duì)象實(shí)例時(shí),必須處理可能發(fā)生異常情況,連接服務(wù)器的地址和端口號(hào)必須與服務(wù)器端保持一致,否則,連接將會(huì)失敗。
3.2獲得輸入/輸出數(shù)據(jù)流
連接成功后,用Socket類(lèi)提供的getInputStream()和getOutputStream()方法創(chuàng)建輸入輸出數(shù)據(jù)流對(duì)象,同時(shí)要在trycatch塊中進(jìn)行異常處理,代碼如下:try{InputStreaminputstr=socketobject.getInputStream();OutputStreamoutputstr=socketobject.getOutputStream();}catch(Exceptionexcept){System.out.println("Errormessage:"+except);}
3.3讀寫(xiě)數(shù)據(jù)
在獲取socket對(duì)象的輸入輸出流后,為了便于進(jìn)行讀寫(xiě)操作,需要在這兩個(gè)流對(duì)象基礎(chǔ)上建立易于操作的數(shù)據(jù)流DataInputStream、DataOuputStream或PrintStream,用下面的程序代碼實(shí)現(xiàn):DataInputStreamdatainstr=newDataInputStream(inputstr);BufferedReaderbufferrd=newBufferedReader(datainstr);DataOuputStreamdataoutstr=newDataOuputStream(outputstr);PrintStreamprintstr=newPrintStream(outputstr);要讀取一字符串,然后將字符串的長(zhǎng)度寫(xiě)入輸出流,操作語(yǔ)句如下:Stringstring1=bufferrd.readLine();dataos.println(string1.length());
3.4斷開(kāi)連接
在通信結(jié)束時(shí)必須斷開(kāi)連接,釋放所占用的資源,關(guān)閉socket。Java提供了close()方法來(lái)完成該項(xiàng)任務(wù),語(yǔ)句如下:socketobject.close();//關(guān)閉Socket對(duì)象serversocket.close();//關(guān)閉ServerSocket對(duì)象
4結(jié)語(yǔ)
Java具有純面向?qū)ο?、跨平臺(tái)、多線程、可移植等
溫馨提示
- 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ù)網(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國(guó)際貿(mào)易進(jìn)口合同范本
- 2025粉煤灰供應(yīng)合同
- 2025貴州白黔高速公路某合同段安全監(jiān)理保證體系
- 2025有關(guān)房屋租賃合同解除通知書(shū)的樣本
- 75字的孟姜女哭長(zhǎng)城讀后感結(jié)尾
- 2025年人教版七年級(jí)地理下冊(cè)月考試卷
- 籃球館戲劇展覽租賃合同
- 展覽展示質(zhì)量獎(jiǎng)評(píng)審規(guī)則
- 2025年蘇教新版八年級(jí)物理下冊(cè)月考試卷
- 倉(cāng)儲(chǔ)基地塔吊司機(jī)招聘協(xié)議
- 超星爾雅學(xué)習(xí)通《藝術(shù)哲學(xué)美是如何誕生的(同濟(jì)大學(xué))》2024章節(jié)測(cè)試答案
- 全國(guó)醫(yī)院數(shù)量統(tǒng)計(jì)
- (2024年)長(zhǎng)歌行漢樂(lè)府古詩(shī)PPT語(yǔ)文課件
- GB/T 43674-2024加氫站通用要求
- 倉(cāng)庫(kù)班長(zhǎng)年終總結(jié)及工作計(jì)劃
- 部編人教版二年級(jí)勞動(dòng)教育上冊(cè)期末試卷(帶答案)
- 肛門(mén)手術(shù)的鎮(zhèn)痛研課件
- 中山醫(yī)院報(bào)告查詢app
- 檢驗(yàn)科質(zhì)控總結(jié)匯報(bào)
- 《如何做好中層》課件
- 破產(chǎn)法培訓(xùn)課件銀行
評(píng)論
0/150
提交評(píng)論