網(wǎng)絡(luò)編程基礎(chǔ)0529linux socket_第1頁
網(wǎng)絡(luò)編程基礎(chǔ)0529linux socket_第2頁
網(wǎng)絡(luò)編程基礎(chǔ)0529linux socket_第3頁
網(wǎng)絡(luò)編程基礎(chǔ)0529linux socket_第4頁
網(wǎng)絡(luò)編程基礎(chǔ)0529linux socket_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Linux高級程序設(shè)計(第二版)第12章Linuxsocket網(wǎng)絡(luò)編程基礎(chǔ)12網(wǎng)絡(luò)通信基礎(chǔ)

BSDSocketTCP網(wǎng)絡(luò)通信編程3BSDSocketUDP網(wǎng)絡(luò)通信編程4使用TCP實現(xiàn)簡單聊天程序2023/3/13人民郵電出版社出版楊宗德編著3OSI模型及TCP/IP協(xié)議模式2023/3/13人民郵電出版社出版楊宗德編著4TCP/IP體系結(jié)構(gòu)及各層協(xié)議2023/3/13人民郵電出版社出版楊宗德編著5IP地址分類2023/3/13人民郵電出版社出版楊宗德編著6IP地址劃分類別前8位(二進制)點分十進制第一字節(jié)范圍默認子網(wǎng)掩碼廣播地址網(wǎng)絡(luò)數(shù)A0XXXXXXX1~126(127為回環(huán)地址)255.0.0.0X.255.255.255126B10XXXXXX128~191255.255.0.0X.X.255.25516384C110XXXXX192~223255.255.255.0X.X.X.2552097152D1110XXXX224~239N/AN/AN/AE1111XXXX240~254N/AN/AN/A2023/3/13人民郵電出版社出版楊宗德編著7網(wǎng)絡(luò)數(shù)據(jù)包封包與拆包過程2023/3/13人民郵電出版社出版楊宗德編著8數(shù)據(jù)包接收拆包分類流程2023/3/13人民郵電出版社出版楊宗德編著9以太網(wǎng)鏈路層數(shù)據(jù)幀格式2023/3/13人民郵電出版社出版楊宗德編著10IP數(shù)據(jù)包頭2023/3/13人民郵電出版社出版楊宗德編著11TCP包頭2023/3/13人民郵電出版社出版楊宗德編著12UDP數(shù)據(jù)包頭第12章Linuxsocket網(wǎng)絡(luò)編程基礎(chǔ)12網(wǎng)絡(luò)通信基礎(chǔ)

BSDSocketTCP網(wǎng)絡(luò)通信編程3BSDSocketUDP網(wǎng)絡(luò)通信編程4使用TCP實現(xiàn)簡單聊天程序2023/3/13人民郵電出版社出版楊宗德編著14類比電話通信,面向連接的socket通信實現(xiàn)2023/3/13人民郵電出版社出版楊宗德編著15通信過程首先,服務(wù)器端需要做以下準備工作:(1)調(diào)用socket()函數(shù)。建立socket對象,指定通信協(xié)議。(2)調(diào)用bind()函數(shù)。將創(chuàng)建的socket對象與當前主機的某一個IP地和端口綁定。(3)調(diào)用listen()函數(shù)。使socket對象處于監(jiān)聽狀態(tài),并設(shè)置監(jiān)聽隊列大小??蛻舳诵枰鲆韵聹蕚涔ぷ鳎海?)調(diào)用socket()函數(shù)。建立socket()對象,指定相同通信協(xié)議。(2)應(yīng)用程序可以顯式的調(diào)用bind()函數(shù)為其綁定IP地址和端口,當然,也可以將這工作交給TCP/IP協(xié)議棧。接著建立通信連接:(1)客戶端調(diào)用connect()函數(shù)。向服務(wù)器端發(fā)出連接請求。(2)服務(wù)端監(jiān)聽到該請求,調(diào)用accept()函數(shù)接受請求,從而建立連接,并返回一個新的socket文件描述符專門處理該連接。然后通信雙方發(fā)送/接收數(shù)據(jù):(1)服務(wù)器端調(diào)用write()或send()函數(shù)發(fā)送數(shù)據(jù),客戶端調(diào)用read()或者recv()函數(shù)接收數(shù)據(jù)。反之客戶端發(fā)送數(shù)據(jù),服務(wù)器端接收數(shù)據(jù)。(2)通信完成后,通信雙方都需要調(diào)用close()或者shutdown()函數(shù)關(guān)閉socket對象。2023/3/13人民郵電出版社出版楊宗德編著16BSDSocket網(wǎng)絡(luò)編程APIsocket2023/3/13人民郵電出版社出版楊宗德編著17Socket參數(shù)說明第一個參數(shù)用來指明此socket對象所使用的地址簇或協(xié)議簇.2023/3/13人民郵電出版社出版楊宗德編著18Socket參數(shù)說明第二個參數(shù)為socket的類型。2023/3/13人民郵電出版社出版楊宗德編著19BSDSocket網(wǎng)絡(luò)編程APIbind完成此步,該socket擁有了本地IP地址,端口,通信協(xié)議,不能接收客戶端的請求,但可以向服務(wù)器發(fā)起連接。2023/3/13人民郵電出版社出版楊宗德編著20Bind參數(shù)說明第二個參數(shù)是一個指向sockaddr結(jié)構(gòu)的指針。structsockaddr只是提供地址類型規(guī)范,根據(jù)不同的應(yīng)用,sockaddr需要選用不同的類型。2023/3/13人民郵電出版社出版楊宗德編著21地址結(jié)構(gòu)體定義--UNIX域套接字2023/3/13人民郵電出版社出版楊宗德編著22地址結(jié)構(gòu)體定義--IPV42023/3/13人民郵電出版社出版楊宗德編著23端口與IP地址2023/3/13人民郵電出版社出版楊宗德編著24BSDSocket網(wǎng)絡(luò)編程APIlisten第一個參數(shù)是綁定了IP及端口信息的socket文件描述符。第二個參數(shù)為請求排隊的最大長度。當有多個客戶端程序和服務(wù)器端相連時,此值表示可以使用的處于等待的隊列長度。listen函數(shù)將綁定的socket文件描述符變?yōu)楸O(jiān)聽套接字,完成此步:服務(wù)器已經(jīng)準備接收客戶端連接請求了。2023/3/13人民郵電出版社出版楊宗德編著25BSDSocket網(wǎng)絡(luò)編程API客戶端發(fā)起連接connect其第一個參數(shù)為socket返回的文件描述符。第二個參數(shù)儲存了服務(wù)器端的地址(包括服務(wù)器的IP地址和端口信息)。第三個參數(shù)為該地址的長度。如果執(zhí)行成功,此函數(shù)將與地址為addr的服務(wù)器建立連接,并返回0,如果失敗則返回-1。正確完成此步:客戶端socket擁有了目的IP,端口信息。2023/3/13人民郵電出版社出版楊宗德編著26BSDSocket網(wǎng)絡(luò)編程API

服務(wù)器接收連接accept

第一個參數(shù)是監(jiān)聽網(wǎng)絡(luò)后的socket文件描述符。第二參數(shù)為structsockaddr類型的地址空間首地址,第三個參數(shù)為該段地址空間長度,因此第二個參數(shù)用來存儲客戶端的IP地址和端口信息,以便為客戶端返回數(shù)據(jù)。需要注意的是,如果執(zhí)行成功,此函數(shù)將返回一個新的文件描述符以標識該連接,從而使原來的文件描述符可以繼續(xù)等待新的連接,這樣便可以實現(xiàn)多客戶端。如果執(zhí)行失敗,將返回-1。至此,兩端的連接已經(jīng)建立,而服務(wù)器端又是如何區(qū)別多個連接的呢?2023/3/13人民郵電出版社出版楊宗德編著27如何區(qū)分多個客戶端對于任何一個TCP連接,最重要的信息包括源IP:源端口,目的IP:目的端口四個信息。例如,客戶機192.168.0.10/24的3000、4000兩端口同時向服務(wù)器192.168.0.100/24的80端口發(fā)起兩個連接,在服務(wù)器端是如何區(qū)別兩個連接的呢?2023/3/13人民郵電出版社出版楊宗德編著28BSDSocket網(wǎng)絡(luò)編程API

讀/寫socket

2023/3/13人民郵電出版社出版楊宗德編著29BSDSocket網(wǎng)絡(luò)編程API

send/recv第一個參數(shù)為發(fā)送的目標socket對象;第二個參數(shù)為欲發(fā)送的數(shù)據(jù)位置;第三個參數(shù)為數(shù)據(jù)的大??;第四個參數(shù)操作flags,支持的值為0或MSG_OOB(發(fā)送帶外數(shù)據(jù))等。對套接字調(diào)用write()的行為與將flags設(shè)置為0的send()的行為完全相同。如果執(zhí)行成功,此函數(shù)將返回發(fā)送數(shù)據(jù)的大小,如果失敗,將返回-1。2023/3/13人民郵電出版社出版楊宗德編著30BSDSocket網(wǎng)絡(luò)編程API關(guān)閉socket對象

close/shutdownhowto=0這個時候系統(tǒng)會關(guān)閉讀通道,但是可以繼續(xù)往socket描述符中寫。howto=1關(guān)閉寫通道,和上面相反,此時只可以讀。howto=2關(guān)閉讀寫通道,和close一樣,在多進程程序里,當幾個子進程共享一個套接字時,如果使用shutdown,那么所有的子進程都將不能操作,這時只能使用close()函數(shù)來關(guān)閉子進程的套接字描述符。第12章Linuxsocket網(wǎng)絡(luò)編程基礎(chǔ)12網(wǎng)絡(luò)通信基礎(chǔ)BSDSocketTCP網(wǎng)絡(luò)通信編程3BSDSocketUDP網(wǎng)絡(luò)通信編程4使用TCP實現(xiàn)簡單聊天程序2023/3/13人民郵電出版社出版楊宗德編著32面向無連接通信模型2023/3/13人民郵電出版社出版楊宗德編著33BSDSocket網(wǎng)絡(luò)編程APIsendto/recvfrom

第一個參數(shù)為發(fā)送的目標socket對象。第二個參數(shù)為欲發(fā)送的數(shù)據(jù)信息。第三個參數(shù)為發(fā)送數(shù)據(jù)的大小。第四個參數(shù)為flags,如send函數(shù)所示。第五個參數(shù)欲發(fā)送數(shù)據(jù)的目標地址,其結(jié)構(gòu)體前面已經(jīng)介紹。第六個參數(shù)為此結(jié)構(gòu)體的大小。2023/3/13人民郵電出版社出版楊宗德編著34BSDSocket網(wǎng)絡(luò)編程APIgetsockname/getpeername獲得一個套接字(這個套接口至少完成了綁定本地IP地址)的本地地址。如果成功則返回0,如果發(fā)生錯誤則返回-1。第1個參數(shù)為欲讀取信息的socket文件描述符第2,3個參數(shù)分別為存儲地址的內(nèi)存空間地址和大小。getpeername()函數(shù)將取得一個已經(jīng)連接上的套接字的遠程信息(比如IP地址和端口)。2023/3/13人民郵電出版社出版楊宗德編著35應(yīng)用示例使用AF_UNIX實現(xiàn)本機數(shù)據(jù)流通信示例見代碼使用AF_INET實現(xiàn)UDP點對點通信示例見代碼第12章Linuxsocket網(wǎng)絡(luò)編程基礎(chǔ)12網(wǎng)絡(luò)通信基礎(chǔ)

BSDSocketTCP網(wǎng)絡(luò)通信編程3BSDSocketUDP網(wǎng)絡(luò)通信編程4使用TCP實現(xiàn)簡單聊天程序2023/3/13人民郵電出版社出版楊宗德編著37服務(wù)端運行結(jié)果(IP地址為192.168.0.93)2023/3/13人民郵電出版社出版楊宗德編著38客戶機運行結(jié)果(IP地址為192.168.0.133)此程序只實現(xiàn)一端到端的數(shù)據(jù)傳遞,且只能一發(fā)一收的方式。具體見代碼分析。2023/3/13人民郵電出版社出版楊宗德編著39習(xí)題(1)七層模型與TCP/IP協(xié)議模型比較,各層完成的基本功能,對應(yīng)的各層最主要功能是什么?(2)寫出你所知道的網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)協(xié)議其簡單工作原理描述,并列出其工作在TCP/IP協(xié)議棧的哪一層。

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論