資源描述:
《網(wǎng)絡(luò)編程_第2講Socket網(wǎng)絡(luò)編程基礎(chǔ).ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在PPT專區(qū)-天天文庫。
1、第2講Socket網(wǎng)絡(luò)編程基礎(chǔ)套接字網(wǎng)絡(luò)編程接口的產(chǎn)生與發(fā)展過程套接字編程的基本概念套接字的特點(diǎn)、應(yīng)用場合、使用的數(shù)據(jù)類型面向連接的套接字編程套接字的工作過程、系統(tǒng)調(diào)用、編程實(shí)例借助實(shí)例分析進(jìn)程的阻塞問題和對(duì)策無連接的套接字編程無連接套接字編程的兩種模式(C/S和對(duì)等)數(shù)據(jù)報(bào)套接字的對(duì)等模式編程實(shí)例2.1套接字網(wǎng)絡(luò)編程接口的產(chǎn)生與發(fā)展2.1.1問題的提出應(yīng)用程序與協(xié)議軟件進(jìn)行交互時(shí)須說明許多細(xì)節(jié):是服務(wù)器還是客戶機(jī),主動(dòng)還是被動(dòng)通信?發(fā)送方需說明發(fā)送的數(shù)據(jù);接收方需說明接收的數(shù)據(jù)如何存放。站在應(yīng)用程序?qū)崿F(xiàn)的角度,應(yīng)用程序如何方便地使用協(xié)議棧軟件
2、進(jìn)行通信呢?如果能在應(yīng)用程序與協(xié)議棧軟件之間提供一個(gè)軟件接口,就可以方便客戶與服務(wù)器軟件的編程。UNIX最早將TCP/IP協(xié)議簇集成到內(nèi)核中,UNIX的開發(fā)者提出并實(shí)現(xiàn)了套接字應(yīng)用編程接口。套接字應(yīng)用程序編程接口:是網(wǎng)絡(luò)應(yīng)用程序通過網(wǎng)絡(luò)協(xié)議棧進(jìn)行通信時(shí)所使用的接口,即應(yīng)用程序與協(xié)議棧軟件之間的接口,簡稱套接字編程接口(SocketAPI)。定義了應(yīng)用程序與協(xié)議棧軟件進(jìn)行交互時(shí)可以使用的一組操作,決定了應(yīng)用程序使用協(xié)議棧的方式、應(yīng)用程序所能實(shí)現(xiàn)的功能、以及開發(fā)具有這些功能的程序的難度。套接字編程接口給出了應(yīng)用程序能夠調(diào)用的一組過程,以及這些過程所
3、需的參數(shù),每個(gè)獨(dú)立的過程完成一個(gè)與協(xié)議棧軟件交互的基本操作(如:建立連接、接收數(shù)據(jù)、釋放鏈接)。2.1.2套接字編程接口的起源與應(yīng)用加州大學(xué)伯克利分校開發(fā)了一個(gè)包括TCP/IP協(xié)議簇的BSDUNIX,并迅速得到推廣,套接字編程接口是這個(gè)操作系統(tǒng)一部分。TCP/IP標(biāo)準(zhǔn)并沒有定義應(yīng)用程序用來與該協(xié)議進(jìn)行交互的應(yīng)用程序編程接口,只規(guī)定了應(yīng)該提供的一般操作,并允許各個(gè)操作系統(tǒng)去定義用來實(shí)現(xiàn)這些操作的具體API。一個(gè)協(xié)議標(biāo)準(zhǔn)可能只是建議某個(gè)操作在應(yīng)用程序發(fā)送數(shù)據(jù)時(shí)是需要的,而由應(yīng)用程序編程接口來定義具體的函數(shù)名和每個(gè)參數(shù)的類型。盡管協(xié)議標(biāo)準(zhǔn)允許操作系統(tǒng)
4、設(shè)計(jì)者開發(fā)自己的應(yīng)用程序編程接口,但由于BSDUNIX的廣泛使用,后來的許多操作系統(tǒng)及編程語言都選擇了對(duì)套接字編程接口的支持。由于這個(gè)套接字規(guī)范最早是由Berkeley大學(xué)開發(fā)的,一般將它稱為BerkeleySockets規(guī)范。BerkeleySockets規(guī)范規(guī)定了一系列與套接字使用有關(guān)的庫函數(shù),為在UNIX操作系統(tǒng)下不同計(jì)算機(jī)中的應(yīng)用程序進(jìn)程之間,使用TCP/IP協(xié)議簇進(jìn)行網(wǎng)絡(luò)通信提供了一套應(yīng)用程序編程接口。2.1.3套接字編程接口的兩種實(shí)現(xiàn)方式采用兩種實(shí)現(xiàn)套接字編程接口的方式:在操作系統(tǒng)的內(nèi)核中增加相應(yīng)的軟件來實(shí)現(xiàn);通過開發(fā)操作系統(tǒng)之外的
5、函數(shù)庫來實(shí)現(xiàn)。在BSDUNIX及起源于它的操作系統(tǒng)中,套接字函數(shù)是操作系統(tǒng)本身的功能調(diào)用,是操作系統(tǒng)內(nèi)核的一部分。其他操作系統(tǒng)供應(yīng)商為了不修改基本操作系統(tǒng),開發(fā)了套接字庫(SocketLibrary)來提供套接字編程接口。套接字庫中的每個(gè)過程具有與UNIX套接字函數(shù)相同的名字與參數(shù),向沒有本機(jī)套接字的操作系統(tǒng)上的應(yīng)用程序提供套接字編程接口。套接字庫與操作系統(tǒng)內(nèi)核中實(shí)現(xiàn)的套接字在語義上是相同的。應(yīng)用程序調(diào)用套接字過程不必管它是由操作系統(tǒng)內(nèi)核過程提供的,還是由庫過程提供的。這種方式提供了程序的可移植性:將程序從一臺(tái)計(jì)算機(jī)移植到另一臺(tái)計(jì)算機(jī)時(shí),程序的
6、源代碼不需改動(dòng),只要用新計(jì)算機(jī)上的套接字庫重新編譯即可。套接字庫與操作系統(tǒng)直接提供的本機(jī)套接字編程接口在實(shí)現(xiàn)上是不同的。套接字庫的過程需要鏈接到應(yīng)用程序中;并駐留于應(yīng)用程序地址空間;調(diào)用時(shí)控制從應(yīng)用程序轉(zhuǎn)向庫程序,并進(jìn)一步調(diào)用一個(gè)或多個(gè)底層操作系統(tǒng)的功能調(diào)用。2.2套接字編程的基本概念圖2.1電插座與電話插座的作用2.2.1什么是套接字(SOCKET)套接字是對(duì)網(wǎng)絡(luò)中不同主機(jī)上應(yīng)用進(jìn)程之間進(jìn)行雙向通信的端點(diǎn)的抽象。一個(gè)套接字就是網(wǎng)絡(luò)上進(jìn)程通信的一端,提供了應(yīng)用層進(jìn)程利用網(wǎng)絡(luò)協(xié)議棧交換數(shù)據(jù)的機(jī)制。圖2.2應(yīng)用進(jìn)程、套接口、網(wǎng)絡(luò)協(xié)議棧及操作系統(tǒng)的關(guān)
7、系兩個(gè)應(yīng)用進(jìn)程只要分別連接到自己的套接字,就可以通過網(wǎng)絡(luò)痛惜,不用去管復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu)及數(shù)據(jù)傳輸過程。從多個(gè)層面來理解套接字這個(gè)概念的內(nèi)涵從所處的地位來講,套接字上聯(lián)應(yīng)用進(jìn)程,下聯(lián)網(wǎng)絡(luò)協(xié)議棧,是應(yīng)用程序通過網(wǎng)絡(luò)協(xié)議棧進(jìn)行通信的接口,是應(yīng)用程序與網(wǎng)絡(luò)協(xié)議棧交互的接口.從實(shí)現(xiàn)的角度來講,非常復(fù)雜。套接字是一個(gè)復(fù)雜的軟件機(jī)構(gòu),包含了一定的數(shù)據(jù)結(jié)構(gòu),包含許多選項(xiàng),由操作系統(tǒng)內(nèi)核管理。從使用的角度來講,非常簡單。對(duì)套接字的操作形成了一種網(wǎng)絡(luò)應(yīng)用程序的編程接口(API),提供了一組系統(tǒng)調(diào)用或庫函數(shù),可以用于構(gòu)造套接字、安裝綁定套接字、連接套接字、通過套接字交
8、換數(shù)據(jù)、關(guān)閉套接字,實(shí)現(xiàn)各種分布式應(yīng)用。套接字編程接口是一套操作套接字的編程接口函數(shù),套接字是它的操作對(duì)象。2.2.2套接字的特點(diǎn)1.通信域通信域:是