2022年基于TCP協(xié)議的網(wǎng)絡(luò)通信_第1頁
2022年基于TCP協(xié)議的網(wǎng)絡(luò)通信_第2頁
2022年基于TCP協(xié)議的網(wǎng)絡(luò)通信_第3頁
2022年基于TCP協(xié)議的網(wǎng)絡(luò)通信_第4頁
2022年基于TCP協(xié)議的網(wǎng)絡(luò)通信_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

Android的網(wǎng)絡(luò)應(yīng)用基于TCP協(xié)議的網(wǎng)絡(luò)通信TCP/IP通信協(xié)議是在通信的兩端各建立一個Socket,從而在通信的兩端之間形成網(wǎng)絡(luò)虛擬鏈路,兩端的程序就可以通過虛擬鏈路進行通信。Java使用Socket對象來代表兩端的通信接口,并通過Socket產(chǎn)生IO流來進行網(wǎng)絡(luò)通信。TCP協(xié)議基礎(chǔ)使用ServerSocket創(chuàng)建TCP服務(wù)器端使用Socket進行通信加入多線程使用ServerSocket創(chuàng)建TCP服務(wù)器端ServerSocket包含一個監(jiān)聽來自客戶端連接請求的方法。publicSocketaccept():如果接收到一個客戶端Socket的連接請求,accept()方法將返回一個與連接客戶端Socket對應(yīng)的Socket(每個TCP連接有兩個Socket);否則該方法將一直處于等待狀態(tài),線程也被阻塞。為了創(chuàng)建ServerSocket對象,ServerSocket類提供了如下幾個構(gòu)造器:publicServerSocket(intport):用指定的端口port來創(chuàng)建一個ServerSocket。publicServerSocket(intport,intbacklog):增加一個用來改變連接隊列長度的參數(shù)backlog。publicServerSocket(intport,intbacklog,InetAddresslocalAddress):在機器存在多個IP地址的情況下,允許通過localAddress這個參數(shù)來指定將ServerSocket綁定到指定的IP地址。當(dāng)ServerSocket使用完畢后,應(yīng)使用ServerSocket的close()方法來關(guān)閉該ServerSocket。通常情況下,服務(wù)器不應(yīng)該只接收一個客戶端請求,而應(yīng)該不斷地接收來自客戶端的所有請求,所以Java程序通常會通過循環(huán)不斷地調(diào)用ServerSocket的accept()方法。使用Socket進行通信利用Socket建立網(wǎng)絡(luò)連接的步驟:1、服務(wù)器監(jiān)聽:服務(wù)器端套接字處于等待連接的狀態(tài),實時監(jiān)控網(wǎng)絡(luò)狀態(tài),等待客戶端的連接請求。2、客戶端請求:指客戶端的套接字提出連接請求,要連接的目標(biāo)是服務(wù)器端的套接字。3、連接確認(rèn):當(dāng)服務(wù)器端套接字監(jiān)聽到客戶端套接字的連接請求時,就響應(yīng)客戶端套接字的請求,建立一個新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,雙方就正式建立連接。該程序在運行中需要訪問互聯(lián)網(wǎng),需要在文件中授權(quán)該程序訪問網(wǎng)絡(luò)的權(quán)限,如圖所示:加入多線程服務(wù)器接收到客戶端連接之后,服務(wù)器向客戶端輸出一個字符串,而客戶端也只是讀取服務(wù)器的字符串后就退出了。當(dāng)使用傳統(tǒng)BufferedReader的readLine()方法讀取數(shù)據(jù)時,當(dāng)該方法成功返回之前,線程被阻塞,程序無法繼續(xù)執(zhí)行。下面的程序?qū)崿F(xiàn)多線程的通信:服務(wù)器端:兩個類,一個是創(chuàng)建ServerSocket監(jiān)聽的主類MyServer,另一個是負(fù)責(zé)處理每個Socket通信的ServerThread類。如圖的截圖是服務(wù)器端只負(fù)責(zé)接收客戶端Socket的連接請求,每當(dāng)客戶端Socket連接到該ServerSocket之后,程序?qū)?yīng)Socket加入socketList集合中保存,并為該Socket啟動一條線程為該客戶端服務(wù),該線程負(fù)責(zé)處理該Socket所有的通信任務(wù)。左圖中的服務(wù)器端線程類不斷讀取客戶端數(shù)據(jù),程序使用readFromClient()方法來讀取客戶端數(shù)據(jù),如果讀取數(shù)據(jù)過程中捕獲到IOException異常,則表明該Socket對應(yīng)的客戶端Socket出現(xiàn)了問題??蛻舳顺绦蚴且粋€Android應(yīng)用,因此需要創(chuàng)建一個Android項目,這個Android應(yīng)用的界面中包含兩個文本框:一個用于接收輸入,另一個用于顯示輸入信息;界面中還有一個發(fā)送按鈕,當(dāng)單擊該按鈕時,程序向服務(wù)器發(fā)送輸入的信息(如圖)。定義一個線程處理Socket所對應(yīng)的輸入流,主線程使用Socket連接到服務(wù)器之后,并啟動了ClientThread來處理該線程的Socket通信。并定義了一個Handler來處理來自

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論