




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第十二章第十二章 Clinet/Server模型與模型與Socket編程接口編程接口12.1 網絡間進程通信12.2 Client/Server模型12.3 Socket編程接口12.3.1 Socket基本概念12.3.2 Socket系統調用其它系統調用12.4 基于Client/Server模型的Socket編程舉例12.4.1 Client/Server模型流程圖12.4.2 Server實現機制12.4.3 UNIX環境下的Socket編程舉例第1頁/共23頁12.1 網絡間進程通信網絡間進程通信 問題一:進程標識的問題 在同一臺主機上,不同進程可以用進程號(Process ID)來
2、標識;但在網絡環境下,不能用進程號來唯一地標識某主機上的通信進程。 問題二:多重協議的識別問題 不同協議的地址格式不同;不同協議的端口分配相互獨立;不同協議的工作方式不同(比如有面向連接與無連接的區別) 問題三:進程間的相互作用模式 Client/Server 分布式系統第2頁/共23頁網絡進程標識 全局唯一的標識一個進程需要用一個三元組(socket地址)(協議,本地主機地址,本地端口號) 一個完整的網絡進程通信(包括兩個用戶進程)需要一個五元組來標識(一對socket地址)(協議,本地主機地址,本地端口號,遠地主機地址,遠地端口號)第3頁/共23頁12.2 Client/Server模型模
3、型 客戶內核服務器內核請求應答網絡第4頁/共23頁12.3 BSD Unix Socket編程接口 在因特網中,兩臺主機上的應用進程在通信之前,必須首先各自創建一個socket,然后再通過bind系統調用對socket進行相應的地址賦值操作,最后應用進程就可以通過socket使用TCP/IP協議來發送和接收數據。 每一個socket有一個唯一的整數標識符,即socket號,該socket號通常由操作系統分配,應用進程通過socket號來引用socket。第5頁/共23頁BSD Unix socket系統調用1. 創建socket:socket( )2. 指定本地地址:bind( )3. 建立s
4、ocket連接:connect( )4. 接收連接請求:listen( ) &accept( )5. 發送數據:send( ) & sendto( )6. 接收數據:recv( ) & recvfrom( )第6頁/共23頁1. 創建socketsocket( ) 創建socket的系統調用是socket( ),其調用格式如下sockidsocket(af,type,protocol)返回值sockid是一個整數,即socket號,創建一個socket實際上是向系統申請一個屬于自己的socket號 socket( )系統調用的三個參數 AF(Address Family
5、) Type Protocol第7頁/共23頁2. 指定本地地址bind( ) bind( )系統調用是將本地socket地址(包括本地主機地址和本地端口)與所創建的socket號聯系起來,即將本地socket地址賦予該socket。 bind( )的調用格式為 bind(sockid,localaddr,addrlen )其中, sockid,已獲得的socket號。 localaddr,本地socket地址:包括本地主機地址和端口號。 addrlen,本地socket地址長度,表示以字節為單位的本地socket地址結構的長度。第8頁/共23頁3. 請求建立連接connect( ) 面向連接
6、的客戶進程通過connect( ) 調用建立與服務器的連接 對于大多數面向連接的協議(如TCP協議),connect( )系統調用將在客戶進程和服務器進程之間建立一條傳輸連接(如TCP連接),connect( ) 調用要等到系統將傳輸連接建立完后才返回,否則將返回出錯信息。第9頁/共23頁connect( )的調用格式 connect(sockid,destaddr,addrlen )其中參數意義如下 sockid,本地socket號。 destaddr,是一個指向服務器的socket地址(信宿地址)結構的指針 addr1en,信宿方socket地址長度第10頁/共23頁4. 接收連接建立請求
7、listen( )和accept( ) 面向連接的服務器進程一般在某個眾所周知的端口上接收客戶進程的連接建立請求。服務器進程平時處于睡眠狀態,一旦有連接建立請求來到時,服務器進程被喚醒并處理客戶進程的連接建立請求。 面向連接的服務器進程通過listen( )和accept( ) 系統調用來接收并處理客戶進程的連接建立請求。 1isten( )系統調用表明服務器進程愿意接收客戶進程的連接請求。 accept( )系統調用用于服務器進程處理客戶進程的連接建立請求。第11頁/共23頁1isten( )系統調用 listen( )一般在accept( )之前調用,其調用格式為: listen(sock
8、id,quelen)其中: sockid,本地socket號,服務器進程在此socket地址上接收連接建立請求。 quelen,連接建立請求隊列長度。listen( )系統調用以此參數限制連接請求的排隊個數,通常允許的連接請求排隊長度最大值為5。第12頁/共23頁accept( )系統調用(1) accept( )系統調用用于服務器進程處理客戶進程的連接請求,其調用格式如下: newsock = accept(sockid,clientaddr,addrlen)其中各個調用參數意義如下: sockid,本地socket號。 clientaddr,指向客戶socket地址結構的指針。 addrl
9、en,客戶socket地址長度。第13頁/共23頁accept( )系統調用(2)clientaddr指向一個初始值為空的地址結構,當accept( )調用返回后,客戶進程的socket地址被填入該地址結構中。addrlen的初始值為0,accept( )調用返回后保存了客戶進程socket地址的長度。第14頁/共23頁 newsock 在并發服務器處理方式中,主服務器進程將fork一個子進程(即從服務器),從服務器子進程通過新socket號(newsock)引用socket來真正處理客戶進程的請求(數據或撤銷連接請求)。主服務器進程繼續通過原來的sockid來引用socket處理其他客戶進程
10、的連接建立請求。 當newsock的值小于0時,表明accept( )調用出錯。第15頁/共23頁利用利用accept( )建立并發服務器建立并發服務器 客戶socket 原socket fork 連接建立 連接請求 listen( ) accept( ) 請求處理 connect( ) 主進程 子進程 客戶 新 socket 第16頁/共23頁5發送數據 send( ) 、write( )和writev( ) 用于面向連接的數據發送,面向連接的數據發送系統調用中可以不必指定接收方socket地址;例如 send(sockid,buf,buflen,flags) sendto( )和sendm
11、sg( )用于無連接的數據發送,無連接的數據發送系統調用必須明確指定接收方的socket地址 sendto(sockid,buf,buflen,flags,destadd,addrlen)第17頁/共23頁6接收數據 接收數據系統調用與發送數據系統調用是一一對應的。 面向連接的數據接收 recv(sockid,buf,buflen,flags) 無連接的數據發送 recvfrom(sockid,buf,buflen,flags,suradd,addrlen)第18頁/共23頁面向連接客戶/服務器模型時序圖socket( )bind( )recv( )send( )close( )connect
12、( )send( )數據發送數據發送阻塞,等待客戶請求服務器圖12-3 面向連接客戶/服務器時序圖listen( )accept( )請求建立連接socket( )客戶recv( )close( )第19頁/共23頁說明 同步是客戶/服務器模型實現中的一個重要問題,socket系統調用很好地解決了這個問題。 服務器進程必須首先啟動,等待服務器進程執行完accept( )調用,服務器進程阻塞并等待客戶發出連接建立請求。 假如客戶進程比服務器進程先啟動,則它發出的connect( )系統調用將返回出錯代碼,連接建立不成功。第20頁/共23頁無連接客戶/服務器模型時序圖socket( )bind( )readfrom( )sendto( )close( )socket( )bind( )sendto( )readfrom( )close( )服務請求服務響應阻塞等待客戶請求服務器客戶第21頁/共23頁說明 那么無連接socket是如何實現彼此通信的。 在
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江西省吉安市峽江縣2025年三下數學期末統考試題含解析
- 研究與開發合同
- 版權轉讓合同協議書范本
- 江蘇省吳江市青云中學2025年校初三第四次模擬數學試題含解析
- 山西省臨汾市曲沃縣重點名校2024-2025學年初三1月月考生物試題含解析
- 環保設備購銷合同模板
- 天津市北辰區名校2025年初三第二學期期末檢測試題物理試題含解析
- 灌溉工程承包合同
- 遼寧省鐵嶺市昌圖縣2018-2019學年八年級上學期期末考試物理試題【含答案】
- 2025年黑龍江省聯考高考模擬歷史質檢試卷A(含答案)
- 殘疾學生送教上門工作手冊
- 北京市某別墅裝修改造工程施工組織設計
- JJF(紡織)064-2013織物防鉆絨性試驗儀(摩擦法)校準規范
- GB/T 34571-2017軌道交通機車車輛布線規則
- GB/T 11834-2011工農業機械用摩擦片
- 低壓配電箱安裝使用說明書A
- 藥品零售企業許可事項申請表模板
- 經尿道前列腺剜除術講解
- 食材配送價格表
- 物業公司xx年度收支情況公示模板
- 封條模板A4直接打印版
評論
0/150
提交評論