




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第第2 2講講 協(xié)議軟件接口協(xié)議軟件接口WindowsWindows網(wǎng)絡(luò)編程基礎(chǔ)網(wǎng)絡(luò)編程基礎(chǔ)1.1.協(xié)議的軟件接口協(xié)議的軟件接口1.TCP/IP協(xié)議軟件接口的特點現(xiàn)象:TCP/IP標準沒有規(guī)定應用軟件與TCP/IP協(xié)議軟件如何接口的細節(jié),只建議了所需的功能集。操作系統(tǒng)操作系統(tǒng)應用程序應用程序TCP/IP實現(xiàn)實現(xiàn)?TCP/IP協(xié)議軟件接口協(xié)議軟件接口特點:不精確指明TCP/IP的設(shè)計者盡量避免使用任何一家廠商的內(nèi)部數(shù)據(jù)表示。TCP/IP標準盡量避免讓接口使用那些只在某一家廠商的操作系統(tǒng)中可用的特征目的:使得協(xié)議的兼容性強,可以運行在多廠商的環(huán)境之中。目前的一些協(xié)議軟件接口Berkeley UNI
2、X:套接字接口(或socket)微軟:Windows SocketAT&T UNIX(System V):TLI(Transport Layer Interface)1.TCP/IP協(xié)議軟件接口的特點2.如何訪問TCP/IP協(xié)議?兩種基本方法:設(shè)計者發(fā)明一種新的系統(tǒng)調(diào)用,應用程序用它們來訪問TCP/IP;列舉出所有的概念性操作為每個操作指定一個名字和參數(shù)將每個操作實現(xiàn)為一個系統(tǒng)調(diào)用設(shè)計者使用一般的I/O調(diào)用訪問TCP/IP擴充一般的I/O原語兩種方法綜合問題的引入Linux系統(tǒng)的I/O模型一般模式:打開打開讀讀/ /寫寫關(guān)閉關(guān)閉步驟: 調(diào)用“打開”獲得對文件或設(shè)備的使用權(quán),并返回整型的
3、文件描述符,此后使用它對該文件或設(shè)備進行I/O操作; 多次調(diào)用“讀/寫”傳輸數(shù)據(jù); 所有傳輸操作完成后,用戶調(diào)用“關(guān)閉”,通知操作系統(tǒng)已經(jīng)完成了對某個對象的使用。Linux中提供的基本I/O功能操作 含義open為輸入或輸出操作準備一個設(shè)備或文件close終止使用以前已經(jīng)打開的設(shè)備或文件read從輸入設(shè)備或文件中獲得數(shù)據(jù),將數(shù)據(jù)放到應用程序的存儲器中write將數(shù)據(jù)從應用程序的存儲器傳導輸出設(shè)備或文件lseek轉(zhuǎn)到文件或設(shè)備中的某個指定位置ioctl控制設(shè)備或用于訪問該設(shè)備軟件(如:指明緩存的大小或改變字符集的映射)Linux中對文件操作打開一個文件讀取一個文件關(guān)閉文件int desc;des
4、c=open(“filename”,O_RDWR,0);read(desc, buffer, 128);close(desc);TCP/IP的角色:相當于一種新的I/O操作,但比普通應用程序與傳統(tǒng)的I/O操作的相互作用復雜得多。網(wǎng)絡(luò)應用程序要解決的問題: 進行網(wǎng)絡(luò)I/O操作的兩個進程在不同機器上,如何建立它們之間的聯(lián)系? 網(wǎng)絡(luò)協(xié)議有很多種,如何建立一種通用機制以支持多種協(xié)議?如何擴充一般的I/O原語?1.1.協(xié)議的軟件接口協(xié)議的軟件接口2.2.套接字套接字一個本地主機建立或擁有的應用程序一個本地主機建立或擁有的應用程序, 在操作系在操作系統(tǒng)控制下的統(tǒng)控制下的,與其它與其它(遠程遠程)應用進程之
5、間發(fā)送和接應用進程之間發(fā)送和接收數(shù)據(jù)的接口。收數(shù)據(jù)的接口。socketsocketsocketsocket(套接字)(套接字)socket 是進行程序間通訊(IPC)的 BSD 方法??蛻魧⒉孱^插入一個服務(wù)器端口建立一個雙向的連接管道客戶端服務(wù)器插口(port)socket的抽象表示Berkeley套接字時間:20世紀80年代早期資助方:遠景研究規(guī)劃局(Advanced Research Projects Agency,ARPA)研究方:加利福尼亞大學伯克利分校產(chǎn)品:套接字接口(套接字API)方法:擴充已有的系統(tǒng)調(diào)用增加新的系統(tǒng)調(diào)用方法socket程序設(shè)計中的幾個重要概念端口:為網(wǎng)絡(luò)通信進程設(shè)
6、置一些抽象的訪問點,提供了多路輸出數(shù)據(jù)到指定應用程序的方法;端口數(shù)據(jù)管理:每一端口有一緩沖區(qū)來存放進入該端口的數(shù)據(jù)隊列;OS提供機制,創(chuàng)建或喚醒相應進程來處理相應端口數(shù)據(jù)。 半相關(guān): 三元組(協(xié)議,本地地址,本地端口號) 唯一標識本地通信一方;全相關(guān): 五元組(協(xié)議,本地地址,本地端口號,遠地地址,遠地端口號),標識一個完整的網(wǎng)絡(luò)通信。進行網(wǎng)絡(luò)進行網(wǎng)絡(luò)I/OI/O操作的兩個進程在操作的兩個進程在不同機器不同機器上,如何建上,如何建立它們之間的聯(lián)系?立它們之間的聯(lián)系?全相關(guān)在客戶-服務(wù)器應用中的體現(xiàn)客戶端:(主動一方) 服務(wù)器的IP地址:知道向誰請求服務(wù) 客戶機的IP地址:讓服務(wù)器知道把數(shù)據(jù)傳送
7、給誰 服務(wù)器的端口號:知道服務(wù)器上究竟是誰來提供服務(wù) 客戶端的端口號:服務(wù)器知道最終把數(shù)據(jù)傳送到哪 使用的傳輸層服務(wù):要求可靠的傳輸,還是不可靠的傳輸?服務(wù)器:(被動方,與客戶端類似) 解決方法套接字類型 流式套接字(SOCK_STREAM): 提供面向連接的、可靠的字節(jié)流服務(wù),用于TCP。 數(shù)據(jù)報套接字(SOCK_DGRAM): 提供無連接的,不可靠的數(shù)據(jù)報服務(wù),用于UDP。 原始套接字(SOCK_RAW): 允許對較低層的協(xié)議,如IP、ICMP直接訪問。網(wǎng)絡(luò)協(xié)議有很多種,如何建立一種網(wǎng)絡(luò)協(xié)議有很多種,如何建立一種通用通用機制以支持機制以支持多種協(xié)議多種協(xié)議? ?將Linux中的 I/O用于
8、TCP/IP擴展文件描述符集(+網(wǎng)絡(luò)通信所使用的描述符)擴展read和write這兩個系統(tǒng)調(diào)用(+網(wǎng)絡(luò)操作功能)其它考慮:指明地址(IP,PORT)指明通訊方式(TCP,UDP,IP)確定通訊角色(Client,Server)處理數(shù)據(jù)格式套接字描述符和文件描述符用于文件用于文件1的內(nèi)部數(shù)據(jù)結(jié)構(gòu)的內(nèi)部數(shù)據(jù)結(jié)構(gòu)用于文件用于文件0的內(nèi)部數(shù)據(jù)結(jié)構(gòu)的內(nèi)部數(shù)據(jù)結(jié)構(gòu)用于文件用于文件2的內(nèi)部數(shù)據(jù)結(jié)構(gòu)的內(nèi)部數(shù)據(jù)結(jié)構(gòu)用于文件用于文件3的內(nèi)部數(shù)據(jù)結(jié)構(gòu)的內(nèi)部數(shù)據(jù)結(jié)構(gòu)用于套接字用于套接字1的內(nèi)部數(shù)據(jù)結(jié)構(gòu)的內(nèi)部數(shù)據(jù)結(jié)構(gòu)3.2 套接字的抽象概念 文件描述符表文件描述符表(一個進程一張)(一個進程一張)0:1:2:3:4:5
9、:針對套接字的系統(tǒng)數(shù)據(jù)結(jié)構(gòu) 文件描述符表文件描述符表(一個進程一張)(一個進程一張)0:1:2:3:4:5:用于文件的內(nèi)部數(shù)據(jù)結(jié)構(gòu)用于文件的內(nèi)部數(shù)據(jù)結(jié)構(gòu)Family:PF_INETService:SOCK_STREAMLocalIP:RemoteIP:Local Port:4000Remote Port:8000用于套接字的內(nèi)部數(shù)據(jù)結(jié)構(gòu)用于套接字的內(nèi)部數(shù)據(jù)結(jié)構(gòu)端點地址端點地址socket編程步驟 建立一個socket 配置socket 連接socket 通過socket發(fā)送數(shù)據(jù) 通過socket接收數(shù)據(jù) 關(guān)閉socketOSIOSI模型與套接口模型
10、與套接口套套接接口口用戶進程用戶進程內(nèi)核內(nèi)核應用層細節(jié)應用層細節(jié)通信細節(jié)通信細節(jié)思考考察一種提供消息傳遞的操作系統(tǒng),你將如何擴展應用程序接口使其適用于網(wǎng)絡(luò)通信?猜一宋詞名句猜一宋詞名句if ( (item) & (!people) ) everything = false ; if (tears.setFlowing() try Speaker skr = new Speaker() catch IOException e; 1.1.協(xié)議的軟件接口協(xié)議的軟件接口2.2.套接字套接字3.Winsock3.Winsock 1.1983年,加利弗尼亞大學Berkely學院推出了UNIX下的網(wǎng)
11、絡(luò)通信接口Socket。 2.90年代初,Sun Microsystems、JSB Corporation、FTP software、Microdyne和微軟等公司共同參與制定了Windows Socket規(guī)范,試圖使Windows下的Sockets程序設(shè)計標準化。 3.1992年制定Windows Socket規(guī)范1.0版,將Socket從UNIX移植到DOS和Windows下。 4.1993年1月,制定了Windows Socket 1.1版。 5.1994年5月,WinSock小組啟動WinSock2規(guī)范制定工作。 6.1997年5月,WinSock2的正式規(guī)范版本2.2.1發(fā)布。l 發(fā)
12、展歷史6 Windows socket Windows Socket API是Windows的網(wǎng)絡(luò)程序接口,它包括一個標準的Berkeley Socket功能函數(shù)集合,和為Windows所作的擴充。 擴充的功能都冠以WSA(Windows Socket Asynchronous)的前綴,表明它們都允許異步的I/O操作,并且采用了符合Windows消息機制的網(wǎng)絡(luò)事件異步選擇機制。WinSock API 開發(fā)組件 功能:供程序員開發(fā)Windows Socket應用程序 組成:a. 介紹Windows Socket實現(xiàn)的文檔 b. Windows Socket應用程序接口(API)導入庫 c. 一些
13、頭文件 其中WINSOCK.H:包括了WinSock實現(xiàn)所定義的宏、常數(shù)值、數(shù)據(jù)結(jié)構(gòu)和函數(shù)調(diào)用接口原型; 運行組件 WINSOCK.DLL:Windows應用程序接口的動態(tài)鏈接庫(DLL),應用程序在執(zhí)行時通過裝入它實現(xiàn)網(wǎng)絡(luò)通信功能。 兩組運行必須的組件:第一版:winsock.h winsock.dll winsock.lib第二版:winsock2.h ws2_32.dll ws2_32.lib1. WinSock的組成 異步選擇機制當使用它登記的網(wǎng)絡(luò)事件發(fā)生時,Windows應用程序相應的窗口接收到一個消息,消息中指示了發(fā)生的網(wǎng)絡(luò)事件,以及與事件相關(guān)的一些信息。 異步請求函數(shù)增加了異步請
14、求服務(wù)函數(shù)WSAAsyncGetXByY( );允許應用程序采用異步方式獲取請求信息,并在請求的服務(wù)完成時給應用程序的窗口發(fā)送一個消息。 阻塞處理方法當一個應用程序的套接字處于阻塞時,使其放棄CPU,讓其它應用程序運行。2. 對Berkeley Socket的擴充出錯處理WSAGetLastError():獲取最近錯誤號 WSASetLastError():設(shè)置最近錯誤號啟動與終止在使用任何Windows Sockets API調(diào)用之前,必須先調(diào)用啟動函數(shù)WSAStartup()來完成Windows Sockets DLL的初始化,協(xié)商版本支持,分配必要的資源。 在應用程序完成了對Window
15、s Sockets的使用之后,必須調(diào)用函數(shù)WSACleanup()從Windows Sockets實現(xiàn)中注銷自己,并允許實現(xiàn)釋放為其分配的任何資源。 2. 對Berkeley Socket的擴充 套接字函數(shù) 數(shù)據(jù)庫函數(shù) Windows擴充的專有函數(shù)Windows Socket 1.1庫函數(shù)第一類:套接字函數(shù) 功能: 完成套接字的創(chuàng)建、關(guān)閉以及對套接字的命名和名字獲取。 一套接字函數(shù)第二類:網(wǎng)絡(luò)連接函數(shù)功能: 完成網(wǎng)絡(luò)連接的建立與關(guān)閉。 一套接字函數(shù)第三類:數(shù)據(jù)傳輸函數(shù) 功能: 完成數(shù)據(jù)的發(fā)送與接收。 一套接字函數(shù)第四類:字節(jié)順序轉(zhuǎn)換函數(shù) 功能: 完成主機字節(jié)順序和網(wǎng)絡(luò)字節(jié)順序之間的轉(zhuǎn)換。 一套
16、接字函數(shù)第五類:地址轉(zhuǎn)換函數(shù) 功能: 完成IP地址的點分十進制形式和二進制整數(shù)形式之間的轉(zhuǎn)換。 一套接字函數(shù)第六類:套接字控制函數(shù) 功能: 設(shè)置/獲取套接字的選項;控制/檢測套接字的工作狀態(tài)。 一套接字函數(shù)獲得一組套接字的狀態(tài),以實現(xiàn)異步獲得一組套接字的狀態(tài),以實現(xiàn)異步I/O操作操作二. 數(shù)據(jù)庫函數(shù)第一類:啟動與終止函數(shù) 三. Windows Socket專用的增設(shè)函數(shù)啟動函數(shù):WSAStartup () 函數(shù)定義:int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData ) 輸入?yún)?shù):wVersionRequested:用戶使用的
17、Windows Socket最高版本,低字節(jié)為主版本,高字節(jié)為次版本。 lpWSAData:存放了Windows Socket實現(xiàn)的細節(jié)。 返回值:成功返回0;失敗返回錯誤碼。 終止函數(shù):WSACleanup() 函數(shù)定義:int WSACleanup (void) 說明說明:必須在所有的套接字函數(shù)之前調(diào)用:必須在所有的套接字函數(shù)之前調(diào)用說明說明:必須在:必須在套接字操作完成后調(diào)用該函數(shù)套接字操作完成后調(diào)用該函數(shù)第二類:異步服務(wù)函數(shù) 三. Windows Socket專用的增設(shè)函數(shù)第三類:基于消息機制的異步I/O函數(shù) 第四類:阻塞處理函數(shù)第四類:阻塞處理函數(shù) 三. Windows Socket專用的增設(shè)函數(shù)函數(shù)名功能WSAAsyncSelect( )Berkeley套接字中的select在WinSock中的擴充,獲得一組套接字的狀態(tài),以實現(xiàn)基于消息機制的異步I/O操作。第五類:錯誤處理函數(shù) 說明:說明:調(diào)試程序時非常有用;調(diào)試程序
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 碼頭貨物運輸合同
- 工程熱力學模擬試答題
- 企業(yè)內(nèi)部年度財務(wù)分析報告
- 寓言故事烏鴉喝水的啟示讀后感
- 企業(yè)知識產(chǎn)權(quán)保護及維權(quán)服務(wù)協(xié)議
- 年度目標達成報告
- 大數(shù)據(jù)挖掘在輿情監(jiān)控中的應用實踐指南
- 如何正確使用辦公軟件提高效率
- 太陽能光伏發(fā)電系統(tǒng)安裝合同
- 人與自然紀錄片評析和諧共生的啟示
- 湖北省華中師大一附中2020-2021高一物理期中檢測試卷【含答案】
- 從生產(chǎn)工藝角度詳解磷酸鐵鋰
- 全套橋梁施工技術(shù)交底記錄
- 《教師職業(yè)道德》全書word版
- 城市定制型商業(yè)醫(yī)療保險(惠民保)知識圖譜
- GB∕T 3836.31-2021 爆炸性環(huán)境 第31部分:由防粉塵點燃外殼“t”保護的設(shè)備
- AMDAR資料的分析和應用
- 橋梁缺陷與預防
- 新蘇教版小學科學三年級下冊全冊教案(2022年春修訂)
- 弗洛姆異化理論
- AQL抽樣標準表xls2
評論
0/150
提交評論