付費(fèi)下載
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
精品文檔-下載后可編輯鑒于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)用程序提供可靠的、無差錯(cuò)的通信連接,使一臺(tái)計(jì)算機(jī)發(fā)出的字節(jié)流準(zhǔn)確無誤地發(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é)議。它是面向無連接的協(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)程之間的通信,客戶程序向套接字里寫入連接請(qǐng)求和服務(wù)請(qǐng)求,然后服務(wù)器會(huì)接收連接請(qǐng)求,并處理這個(gè)請(qǐng)求,最后,服務(wù)器把處理結(jié)果寫入套接字送回客戶程序。具體來說,一個(gè)Socket服務(wù)器應(yīng)用程序會(huì)監(jiān)聽某一特定端口,等待Socket客戶程序的連接請(qǐng)求。當(dāng)一個(gè)連接請(qǐng)求到達(dá)時(shí),服務(wù)器和客戶就建立一個(gè)通信連接。在連接過程中,客戶被分配一個(gè)本地端口號(hào),并通過該端口與Socket連接,客戶通過讀寫Socket與服務(wù)器交換數(shù)據(jù)信息,同樣,服務(wù)器也被分配一個(gè)新的端口號(hào),它需要通過這個(gè)新的端口號(hào),來繼續(xù)監(jiān)聽原端口上的其它連接請(qǐng)求。服務(wù)器也給它的本地端口連接一個(gè)Socket,通過讀寫它與客戶交換數(shù)據(jù)信息,以實(shí)現(xiàn)服務(wù)器和客戶機(jī)的通信目的。
目前,用戶可以使用兩類套接字,即TCP協(xié)議采用的流套接字和UDP協(xié)議采用的數(shù)據(jù)報(bào)套接字。流套接字提供了雙向的、有序的、無重復(fù)并且無記錄邊界的數(shù)據(jù)流服務(wù)。數(shù)據(jù)報(bào)套接字支持雙向的數(shù)據(jù)流,但不保證是可靠的、有序的、無重復(fù)的。
2Socket通信工作原理[2]
Socket數(shù)據(jù)通信按照以下步驟進(jìn)行:首先,建立Socket連接。通信正式開始之前,雙方必須相互確認(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ì)語言中,開發(fā)包提供的ServerSocket類和Socket類及其方法,可實(shí)現(xiàn)上述操作。Socket工作原理如圖1所示,服務(wù)器端的通信進(jìn)程首先選擇一個(gè)端口號(hào),然后調(diào)用accept()方法對(duì)此端口進(jìn)行監(jiān)聽,等待客戶通信進(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ì)象,并通過該對(duì)象雙方進(jìn)行數(shù)據(jù)交換和數(shù)據(jù)通信。
3JavaSocket通信模型[3]
3.1建立Socket連接
首先,在服務(wù)器端創(chuàng)建一個(gè)ServerSocket類的實(shí)例對(duì)象,該對(duì)象用于監(jiān)聽客戶端的連接請(qǐng)求,代碼如下:ServerSocketserversocket;try{serversocket=newServerSocket(8888);}catch(Exceptionexcept){System.out.println("Errormessage:"+except);}在服務(wù)器端建立ServerSocket對(duì)象實(shí)例時(shí),必須使用try...catch語句進(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類的serversocket對(duì)象的accept()方法進(jìn)行監(jiān)聽,等待客戶端程序的連接請(qǐng)求。在連接請(qǐng)求到達(dá)之前,線程一直處于阻塞狀態(tài),當(dāng)一個(gè)連接請(qǐng)求到來時(shí),初始化連接Socket類的socketobject對(duì)象,程序?qū)崿F(xiàn)如下:Socketsocketobject;try{socketobject=serversocket.accept();}catch(Exceptionexcept){System.out.println("Errormessage:"+except);}如果連接成功,accept方法將返回客戶端的socketobject對(duì)象實(shí)例。在一般情況下,通過必要的數(shù)據(jù)信息交換,將由另外的服務(wù)程序?qū)iT為該連接提供相應(yīng)的信息服務(wù),而serversocket對(duì)象實(shí)例將被釋放出來,繼續(xù)監(jiān)聽其它客戶端的連接請(qǐng)求。
最后,在客戶端建立一個(gè)Socket類的socketobject對(duì)象,請(qǐng)求建立連接:Socketsockettobject;try{socketobject=newSocket("Serveraddress",8888);}catch(Exceptionexcept){System.out.println("Errormessage:"+except);}在客戶端建立Socket類的socketobject對(duì)象實(shí)例時(shí),必須處理可能發(fā)生異常情況,連接服務(wù)器的地址和端口號(hào)必須與服務(wù)器端保持一致,否則,連接將會(huì)失敗。
3.2獲得輸入/輸出數(shù)據(jù)流
連接成功后,用Socket類提供的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讀寫數(shù)據(jù)
在獲取socket對(duì)象的輸入輸出流后,為了便于進(jìn)行讀寫操作,需要在這兩個(gè)流對(duì)象基礎(chǔ)上建立易于操作的數(shù)據(jù)流DataInputStream、DataOuputStream或PrintStream,用下面的程序代碼實(shí)現(xiàn):DataInputStreamdatainstr=newDataInputStream(inputstr);BufferedReaderbufferrd=newBufferedReader(datainstr);DataOuputStreamdataoutstr=newDataOuputStream(outputstr);PrintStreamprintstr=newPrintStream(outputstr);要讀取一字符串,然后將字符串的長度寫入輸出流,操作語句如下:Stringstring1=bufferrd.readLine();dataos.println(string1.length());
3.4斷開連接
在通信結(jié)束時(shí)必須斷開連接,釋放所占用的資源,關(guān)閉socket。Java提供了close()方法來完成該項(xiàng)任務(wù),語句如下:socketobject.close();//關(guān)閉Socket對(duì)象serversocket.close();//關(guān)閉ServerSocket對(duì)象
4結(jié)語
Java具有純面向?qū)ο?、跨平臺(tái)、多線程、可移植等
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年曲靖六十九醫(yī)院醫(yī)療人才招聘(23人)參考考試試題附答案解析
- 2026浙江臺(tái)州市溫嶺市丹崖綜合市場服務(wù)有限公司駕駛員招聘1人備考考試試題附答案解析
- 2026年西北婦女兒童醫(yī)院產(chǎn)房導(dǎo)樂師招聘(5人)備考考試試題附答案解析
- 吉水縣城控人力資源服務(wù)有限公司2026年面向社會(huì)公開招聘勞務(wù)派遣工作人員 至吉水縣審計(jì)局備考考試試題附答案解析
- 2026中國人民大學(xué)綜合服務(wù)中心招聘2人備考考試試題附答案解析
- 測繪隊(duì)安全生產(chǎn)制度
- 農(nóng)業(yè)生產(chǎn)部門制度
- 合作社生產(chǎn)作業(yè)制度
- 磁共振生產(chǎn)規(guī)章制度
- 生產(chǎn)管理架構(gòu)及管理制度
- 2025-2030半導(dǎo)體缺陷檢測設(shè)備行業(yè)運(yùn)營模式與供需趨勢(shì)預(yù)測研究報(bào)告
- GB/T 46755-2025智能紡織產(chǎn)品通用技術(shù)要求
- 2026年湖南國防工業(yè)職業(yè)技術(shù)學(xué)院單招職業(yè)技能考試題庫附答案
- 2026年殘疾人聯(lián)合會(huì)就業(yè)服務(wù)崗招聘筆試適配題含答案
- 國家電網(wǎng)公司招聘高校畢業(yè)生應(yīng)聘登記表
- 見證取樣手冊(cè)(智能建筑分部)
- DZ∕T 0353-2020 地球化學(xué)詳查規(guī)范(正式版)
- 醫(yī)療衛(wèi)生輿情課件
- 2023-2024學(xué)年宜賓市高一數(shù)學(xué)上學(xué)期期末質(zhì)量監(jiān)測試卷附答案解析
- 實(shí)用的標(biāo)準(zhǔn)氧化還原電位表
- 英語口語8000句(情景模式)
評(píng)論
0/150
提交評(píng)論