




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、第12章Linux socket網(wǎng)絡編程基礎 12網(wǎng)絡通信基礎 BSD Socket TCP網(wǎng)絡通信編程3BSD Socket UDP網(wǎng)絡通信編程4使用TCP實現(xiàn)簡單聊天程序第1頁,共38頁。2022/8/202OSI模型及TCP/IP協(xié)議模式 第2頁,共38頁。2022/8/203TCP/IP體系結構及各層協(xié)議 第3頁,共38頁。2022/8/204IP地址分類 第4頁,共38頁。2022/8/205IP地址劃分 類別前8位(二進制)點分十進制第一字節(jié)范圍默認子網(wǎng)掩碼廣播地址網(wǎng)絡數(shù)A0XXXXXXX1126(127為回環(huán)地址)255.0.0.0X.255.255.255126B10XXXXX
2、X128191255.255.0.0X.X.255.25516384C110XXXXX192223255.255.255.0X.X.X.2552097152D1110XXXX224239N/AN/AN/AE1111XXXX240254N/AN/AN/A第5頁,共38頁。2022/8/206網(wǎng)絡數(shù)據(jù)包封包與拆包過程 第6頁,共38頁。2022/8/207數(shù)據(jù)包接收拆包分類流程 第7頁,共38頁。2022/8/208以太網(wǎng)鏈路層數(shù)據(jù)幀格式 第8頁,共38頁。2022/8/209IP數(shù)據(jù)包頭 第9頁,共38頁。2022/8/2010TCP包頭 第10頁,共38頁。2022/8/2011UDP數(shù)據(jù)包頭
3、 第11頁,共38頁。第12章Linux socket網(wǎng)絡編程基礎 12網(wǎng)絡通信基礎 BSD Socket TCP網(wǎng)絡通信編程3BSD Socket UDP網(wǎng)絡通信編程4使用TCP實現(xiàn)簡單聊天程序第12頁,共38頁。2022/8/2013類比電話通信,面向連接的socket通信實現(xiàn) 第13頁,共38頁。2022/8/2014通信過程首先,服務器端需要做以下準備工作:(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),并設置監(jiān)聽隊
4、列大小??蛻舳诵枰鲆韵聹蕚涔ぷ鳎海?)調(diào)用socket()函數(shù)。建立socket()對象,指定相同通信協(xié)議。(2)應用程序可以顯式的調(diào)用bind()函數(shù)為其綁定IP地址和端口,當然,也可以將這工作交給TCP/IP協(xié)議棧。接著建立通信連接:(1)客戶端調(diào)用connect()函數(shù)。向服務器端發(fā)出連接請求。(2)服務端監(jiān)聽到該請求,調(diào)用accept()函數(shù)接受請求,從而建立連接,并返回一個新的socket文件描述符專門處理該連接。然后通信雙方發(fā)送/接收數(shù)據(jù):(1)服務器端調(diào)用write()或send()函數(shù)發(fā)送數(shù)據(jù),客戶端調(diào)用read()或者recv()函數(shù)接收數(shù)據(jù)。反之客戶端發(fā)送數(shù)據(jù),服務器端接
5、收數(shù)據(jù)。(2)通信完成后,通信雙方都需要調(diào)用close()或者shutdown()函數(shù)關閉socket對象。 第14頁,共38頁。2022/8/2015BSD Socket網(wǎng)絡編程API socket第15頁,共38頁。2022/8/2016Socket參數(shù)說明第一個參數(shù)用來指明此socket對象所使用的地址簇或協(xié)議簇.第16頁,共38頁。2022/8/2017Socket參數(shù)說明第二個參數(shù)為socket的類型。 第17頁,共38頁。2022/8/2018BSD Socket網(wǎng)絡編程API bind完成此步,該socket擁有了本地IP地址,端口,通信協(xié)議,不能接收客戶端的請求,但可以向服務器
6、發(fā)起連接。第18頁,共38頁。2022/8/2019Bind參數(shù)說明第二個參數(shù)是一個指向sockaddr結構的指針。 struct sockaddr只是提供地址類型規(guī)范,根據(jù)不同的應用,sockaddr需要選用不同的類型。第19頁,共38頁。2022/8/2020地址結構體定義- UNIX域套接字 第20頁,共38頁。2022/8/2021地址結構體定義- IPV4 第21頁,共38頁。2022/8/2022端口與IP地址第22頁,共38頁。2022/8/2023BSD Socket網(wǎng)絡編程API listen第一個參數(shù)是綁定了IP及端口信息的socket文件描述符。第二個參數(shù)為請求排隊的最大
7、長度。當有多個客戶端程序和服務器端相連時, 此值表示可以使用的處于等待的隊列長度。listen 函數(shù)將綁定的socket文件描述符變?yōu)楸O(jiān)聽套接字,完成此步: 服務器已經(jīng)準備接收客戶端連接請求了。第23頁,共38頁。2022/8/2024BSD Socket網(wǎng)絡編程API客戶端發(fā)起連接 connect其第一個參數(shù)為socket返回的文件描述符。第二個參數(shù)儲存了服務器端的地址(包括服務器的IP地址和端口信息)。第三個參數(shù)為該地址的長度。如果執(zhí)行成功,此函數(shù)將與地址為addr的服務器建立連接,并返回0,如果失敗則返回-1。正確完成此步:客戶端socket擁有了目的IP,端口信息。第24頁,共38頁。
8、2022/8/2025BSD Socket網(wǎng)絡編程API服務器接收連接 accept 第一個參數(shù)是監(jiān)聽網(wǎng)絡后的socket文件描述符。第二參數(shù)為struct sockaddr 類型的地址空間首地址,第三個參數(shù)為該段地址空間長度,因此第二個參數(shù)用來存儲客戶端的IP地址和端口信息,以便為客戶端返回數(shù)據(jù)。需要注意的是,如果執(zhí)行成功,此函數(shù)將返回一個新的文件描述符以標識該連接,從而使原來的文件描述符可以繼續(xù)等待新的連接,這樣便可以實現(xiàn)多客戶端。如果執(zhí)行失敗,將返回-1。至此,兩端的連接已經(jīng)建立,而服務器端又是如何區(qū)別多個連接的呢?第25頁,共38頁。2022/8/2026如何區(qū)分多個客戶端對于任何一個
9、TCP連接,最重要的信息包括源IP:源端口,目的IP:目的端口四個信息。例如,客戶機192.168.0.10/24的3000、4000兩端口同時向服務器192.168.0.100/24的80端口發(fā)起兩個連接,在服務器端是如何區(qū)別兩個連接的呢?第26頁,共38頁。2022/8/2027BSD Socket網(wǎng)絡編程API讀/寫socket 第27頁,共38頁。2022/8/2028BSD Socket網(wǎng)絡編程APIsend/recv第一個參數(shù)為發(fā)送的目標socket對象;第二個參數(shù)為欲發(fā)送的數(shù)據(jù)位置;第三個參數(shù)為數(shù)據(jù)的大?。坏谒膫€參數(shù)操作flags,支持的值為0或MSG_OOB(發(fā)送帶外數(shù)據(jù))等。
10、對套接字調(diào)用write()的行為與將flags設置為0的send()的行為完全相同。如果執(zhí)行成功,此函數(shù)將返回發(fā)送數(shù)據(jù)的大小,如果失敗,將返回-1。第28頁,共38頁。2022/8/2029BSD Socket網(wǎng)絡編程API 關閉socket對象 close/shutdownhowto=0這個時候系統(tǒng)會關閉讀通道,但是可以繼續(xù)往socket描述符中寫。howto=1關閉寫通道,和上面相反,此時只可以讀。howto=2關閉讀寫通道,和close一樣,在多進程程序里,當幾個子進程共享一個套接字時,如果使用shutdown,那么所有的子進程都將不能操作,這時只能使用close()函數(shù)來關閉子進程的套
11、接字描述符。第29頁,共38頁。第12章Linux socket網(wǎng)絡編程基礎 12網(wǎng)絡通信基礎 BSD Socket TCP網(wǎng)絡通信編程3BSD Socket UDP網(wǎng)絡通信編程4使用TCP實現(xiàn)簡單聊天程序第30頁,共38頁。2022/8/2031面向無連接通信模型 第31頁,共38頁。2022/8/2032BSD Socket網(wǎng)絡編程API sendto/ recvfrom 第一個參數(shù)為發(fā)送的目標socket對象。第二個參數(shù)為欲發(fā)送的數(shù)據(jù)信息。第三個參數(shù)為發(fā)送數(shù)據(jù)的大小。第四個參數(shù)為flags,如send函數(shù)所示。第五個參數(shù)欲發(fā)送數(shù)據(jù)的目標地址,其結構體前面已經(jīng)介紹。第六個參數(shù)為此結構體的大
12、小。第32頁,共38頁。2022/8/2033BSD Socket網(wǎng)絡編程API getsockname / getpeername獲得一個套接字(這個套接口至少完成了綁定本地IP地址)的本地地址。如果成功則返回0 ,如果發(fā)生錯誤則返回-1。第1個參數(shù)為欲讀取信息的socket文件描述符第2,3個參數(shù)分別為存儲地址的內(nèi)存空間地址和大小。getpeername()函數(shù)將取得一個已經(jīng)連接上的套接字的遠程信息(比如IP 地址和端口)。 第33頁,共38頁。2022/8/2034應用示例使用 AF_UNIX實現(xiàn)本機數(shù)據(jù)流通信示例 見代碼使用AF_INET實現(xiàn)UDP點對點通信示例 見代碼第34頁,共38
13、頁。第12章Linux socket網(wǎng)絡編程基礎 12網(wǎng)絡通信基礎 BSD Socket TCP網(wǎng)絡通信編程3BSD Socket UDP網(wǎng)絡通信編程4使用TCP實現(xiàn)簡單聊天程序第35頁,共38頁。2022/8/2036服務端運行結果(IP地址為192.168.0.93) 第36頁,共38頁。2022/8/2037客戶機運行結果(IP地址為192.168.0.133) 此程序只實現(xiàn)一端到端的數(shù)據(jù)傳遞,且只能一發(fā)一收的方式 。具體見代碼分析。第37頁,共38頁。2022/8/2038習題(1)七層模型與TCP/IP協(xié)議模型比較,各層完成的基本功能,對應的各層最主要功能是什么?(2)寫出你所知道的網(wǎng)絡設備、網(wǎng)絡協(xié)議其簡單工作原理描述,并列出其工作在TCP/IP協(xié)議棧的哪一層。(3)試寫出網(wǎng)絡
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 旅游景區(qū)擴建用地居間
- 新能源汽車充電樁上市公司
- 新能源技術發(fā)展及應用練習題
- 三農(nóng)村電商三農(nóng)村電商與旅游融合方案
- 農(nóng)業(yè)綜合開發(fā)項目可行性研究報告
- 醫(yī)療器械可行性分析報告模板
- 磐安縣生活垃圾焚燒發(fā)電項目
- 電影娛樂產(chǎn)業(yè)制作與發(fā)行指南
- 品牌傳播策略實施方案
- 三農(nóng)創(chuàng)新驅(qū)動發(fā)展戰(zhàn)略作業(yè)指導書
- 《以哪吒精神照亮成長之路》開學家長會課件
- 2021年四川省綿陽市中考語文真題及答案
- 公司休假銷假單模板
- 婦產(chǎn)科介入治療護理常規(guī)
- 《基于杜邦分析法的企業(yè)財務分析國內(nèi)外文獻綜述》
- 統(tǒng)計學調(diào)查報告(共5篇)
- 四川大學C語言上機考試題
- 2022年蕪湖職業(yè)技術學院職業(yè)適應性測試題庫及答案解析
- DBJ∕T 15-134-2018 廣東省地下管線探測技術規(guī)程
- 人崗匹配分析和總結
- 幼小銜接拼音課程 課件(共49張PPT)
評論
0/150
提交評論