版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
網(wǎng)絡(luò)操作系統(tǒng)第五章網(wǎng)絡(luò)操作系統(tǒng)
的接口學(xué)習(xí)目標(biāo)通過本章的學(xué)習(xí),希望您能夠了解:應(yīng)用程序接口的編程使用方法套接字在網(wǎng)絡(luò)通信中的應(yīng)用本章內(nèi)容1.應(yīng)用程序接口的概念2.UNIX套接字及其應(yīng)用3.WinSock及其應(yīng)用課程議題1.應(yīng)用程序接口的概念一、應(yīng)用程序接口的概念應(yīng)用程序接口是一組定義、程序及協(xié)議的集合,通過API接口可以實(shí)現(xiàn)計(jì)算機(jī)軟件之間的相互通信。目的是提供應(yīng)用程序與開發(fā)人員基于某軟件或硬件的以訪問一組例程的能力,而又無需訪問源碼,或理解內(nèi)部工作機(jī)制的細(xì)節(jié)。操作系統(tǒng)的用戶接口包括命令輸入和系統(tǒng)調(diào)用,應(yīng)用程序接口是完成某一個(gè)功能的多個(gè)系統(tǒng)調(diào)用和命令的組合,其功能是完成某一特定的操作。優(yōu)點(diǎn):簡化編程、提高效率WindowsAPIWindowsAPI是一套用來控制Windows的各個(gè)部件的外觀和行為的一套預(yù)先定義的Windows函數(shù).用戶的每個(gè)動(dòng)作都會(huì)引發(fā)一個(gè)或幾個(gè)函數(shù)的運(yùn)行以告訴Windows發(fā)生了什么.API函數(shù)包含在Windows系統(tǒng)目錄下的動(dòng)態(tài)連接庫文件中。更易理解地說:Windows這個(gè)多作業(yè)系統(tǒng)除了協(xié)調(diào)應(yīng)用程式的執(zhí)行、分配內(nèi)存、管理系統(tǒng)資源…
之外,她同時(shí)也是一個(gè)很大的服務(wù)中心,調(diào)用這個(gè)服務(wù)中心的各種服務(wù)(每一種服務(wù)就是一個(gè)函數(shù)),可以幫應(yīng)用程式達(dá)到開啟視窗、描繪圖形、使用周邊設(shè)備…等目的,由于這些函數(shù)服務(wù)的對象是應(yīng)用程式,所以便稱之為ApplicationProgrammingInterface,簡稱API函數(shù)。WIN32API也就是MicrosoftWindows32位平臺的應(yīng)用程序編程接口。在這些工具中提供了大量的類庫和各種控件,它們替代了API的神秘功能,事實(shí)上這些類庫和控件都是構(gòu)架在WIN32API函數(shù)基礎(chǔ)之上的,是封裝了的API函數(shù)的集合。它們把常用的API函數(shù)的組合在一起成為一個(gè)控件或類庫,并賦予其方便的使用方法,所以極大的加速了WINDOWS應(yīng)用程序開發(fā)的過程。有了這些控件和類庫,程序員便可以把主要精力放在程序整體功能的設(shè)計(jì)上,而不必過于關(guān)注技術(shù)細(xì)節(jié)。應(yīng)用程序接口(API)API也是一種中間件,為各種不同的平臺提供數(shù)據(jù)共享。API分類:1)遠(yuǎn)程過程調(diào)用:通過作用在共享數(shù)據(jù)緩存器上的過程實(shí)現(xiàn)程序間的通信。2)標(biāo)準(zhǔn)查詢語言(SQL):是標(biāo)準(zhǔn)的訪問數(shù)據(jù)庫的查詢語言,通過通用數(shù)據(jù)庫實(shí)現(xiàn)應(yīng)用程序間的數(shù)據(jù)共享。3)文件傳輸:通過發(fā)送格式化的文件實(shí)現(xiàn)應(yīng)用程序間的數(shù)據(jù)共享4)信息交付:指松耦合或緊耦合應(yīng)用程序間的小型格式化信息,通過程序間的直接通信實(shí)現(xiàn)數(shù)據(jù)共享。開放API接口分類某些公司會(huì)將API作為其公共開放系統(tǒng),公司制訂自己的系統(tǒng)接口標(biāo)準(zhǔn),當(dāng)需要執(zhí)行系統(tǒng)整合、自定義和程序應(yīng)用等操作時(shí),公司所有成員都可以通過該接口標(biāo)準(zhǔn)調(diào)用源代碼,該接口標(biāo)準(zhǔn)稱為開放式API。三種占主導(dǎo)地位的開放式API:1)
AT&T的UNIXSystemV,提供TLI/XTI接口。2)伯克利的軟件分布系統(tǒng)(BSD),提供Socket接口。3)
Microsoft的Windows系列,提供WinSock接口。一、TLI/XTI函數(shù)TLI即傳輸層接口,提供了OSI傳輸層和會(huì)話層之間的API。XTI即開放式傳送接口,它由TLI接口演變而來。TLI/XTI是一組函數(shù)的集合,為用戶提供傳輸層接口,包括建立通信、管理連接以及傳送數(shù)據(jù)、應(yīng)用程序利用這些函數(shù)實(shí)現(xiàn)網(wǎng)絡(luò)應(yīng)用??刂频讓拥木W(wǎng)絡(luò)活動(dòng)。1.TLI/XTI結(jié)構(gòu)TLI/XTI把相互通信的兩個(gè)進(jìn)程稱為端點(diǎn)。提供網(wǎng)絡(luò)應(yīng)用底層端點(diǎn)到端點(diǎn)的通信,為用戶應(yīng)用進(jìn)程提供了直接傳輸?shù)慕涌?。TLI/XTI提供了直接傳輸?shù)慕涌冢詫?shù)據(jù)封裝和協(xié)議指定留給了用戶,具有更多的靈活性,當(dāng)然也失去了部分的通用性。用戶進(jìn)程端點(diǎn)傳輸層用戶進(jìn)程端點(diǎn)傳輸層2.TLI/XTI實(shí)例見課本P142頁程序?qū)嵗LI/XTI的服務(wù)模式面向連接的服務(wù)模式和面向非連接的服務(wù)模式??蛻舳朔?wù)端客戶端服務(wù)端SYNSYN,ackackSYNRSTT_openT_bindT_listenT_openT_bindT_connect課程議題2.UNIX套接字及其應(yīng)用一、套接字TCP/IP參考模型就是廣為人知的Socket接口。套接字,也就是Socket接口,簡單地說就是通信雙方的一種約定,利用套接字中的相關(guān)函數(shù)來完成通信過程。Socket協(xié)議的形象描述socket非常類似于電話插座。以一個(gè)國家級電話網(wǎng)為例。在電話系統(tǒng)中,一般用戶只能感受到本地電話機(jī)和對方電話號碼的存在,建立通話的過程,話音傳輸?shù)倪^程以及整個(gè)電話系統(tǒng)的技術(shù)細(xì)節(jié)對他都是透明的,這也與socket機(jī)制非常相似。socket利用網(wǎng)間網(wǎng)通信設(shè)施實(shí)現(xiàn)進(jìn)程通信,但它對通信設(shè)施的細(xì)節(jié)毫不關(guān)心,只要通信設(shè)施能提供足夠的通信能力,它就滿足了。通信原理Socket可以看成在兩個(gè)程序間進(jìn)行通信連接中的一個(gè)端點(diǎn)。一個(gè)程序?qū)⒁欢涡畔懭隨ocket中,該Socket將這段信息發(fā)送給另外一個(gè)Socket,使這段信息能傳送到其它程序中。ProgrammeAProgrammeAHostAHostB套接字TCP/IP網(wǎng)絡(luò)網(wǎng)絡(luò)接口卡socketsocket實(shí)質(zhì)上提供了進(jìn)程通信的端點(diǎn)。進(jìn)程通信之前,雙方首先必須各自創(chuàng)建一個(gè)端點(diǎn),否則是沒有辦法建立聯(lián)系并相互通信的。正如打電話之前,雙方必須各自擁有一臺電話機(jī)一樣。在網(wǎng)間網(wǎng)內(nèi)部,每一個(gè)socket用一個(gè)半相關(guān)描述:(協(xié)議,本地地址,本地端口)
用IP地址尋找目的地,IP地址是32位,通常用點(diǎn)分十進(jìn)制方式表示。IPv6共128位。端口:16位,范圍0-65535,低于256的端口號為保留給標(biāo)準(zhǔn)應(yīng)用程序。主要用于區(qū)分那個(gè)進(jìn)程所用傳輸?shù)臄?shù)據(jù)。套接字分類套接字是通信的基石,是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本單元??梢詫⑻捉幼挚醋鍪遣煌鳈C(jī)間的進(jìn)程進(jìn)行雙向通信的端點(diǎn),它構(gòu)成了單個(gè)主機(jī)內(nèi)及整個(gè)網(wǎng)絡(luò)間的編程界面。按通信性質(zhì)分為:流套接字和數(shù)據(jù)報(bào)套接字。套接字之間的連接過程分為三步驟互聯(lián)網(wǎng)通信,至少需要一對套接字,其中一個(gè)運(yùn)行于客戶端,稱為ClientSocket,一個(gè)運(yùn)行于服務(wù)端,稱為ServerSocket。根據(jù)連接啟動(dòng)的方式以及本地套接字連接的目標(biāo),分為三步:1服務(wù)監(jiān)聽2客戶端請求3連接確認(rèn)2套接字的應(yīng)用通信過程見課本P149頁。利用套接字進(jìn)行網(wǎng)絡(luò)通信一般要用到一下幾個(gè)函數(shù):
1創(chuàng)建套接字函數(shù)socket;
2綁定本地名稱函數(shù)bind;
3建立連接函數(shù)connect;
4偵聽函數(shù)listen;
5接受數(shù)據(jù)函數(shù)accept;
6關(guān)閉套接字函數(shù)close。練習(xí)1.TLI/XTI是一組函數(shù)的集合,為用戶提供()A.網(wǎng)絡(luò)層接口 B.應(yīng)用層接口C.運(yùn)輸層接口 D.物理層接口2.IPV4的IP地址為()A.16位 B.32位C.64位 D.128位3.利用套接字進(jìn)行網(wǎng)絡(luò)通信時(shí),創(chuàng)建套接字的函數(shù)是()A.bind B.connectC.1isten D.socket練習(xí)1.TLI/XTI提供兩種服務(wù)模式,即面向連接的服務(wù)模式和______的服務(wù)模式。2.TLI/XTI把相互通信的兩個(gè)進(jìn)程稱為()
A.端口B.節(jié)點(diǎn)C.接口D.端點(diǎn)3.支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元是()
A.套接字B.端口C.端口號D.功能調(diào)用利用套接字進(jìn)行網(wǎng)絡(luò)通信時(shí),建立連接的函數(shù)是()
A.socket
B.bind
C.connect
D.accept支持雙向的數(shù)據(jù)流,但并不保證是可靠、有序、無重復(fù)的是()
A.流套接字B.數(shù)據(jù)報(bào)套接字
C.客戶端套接字D.服務(wù)器端套接字通常所說的套接字(socket)一般指UNIX環(huán)境下流行的_______________編程接口。課程議題3.WinSock及其應(yīng)用一、winsock概述在Windows環(huán)境下利用套接字在TCP/IP上的編程接口就叫做WindowsSockets,即WinSock。通常所說的套接字,是指UNIX環(huán)境下的TCP/IP編程接口。WinSock規(guī)范是以U.CBerkeley大學(xué)的BSDUNIX中流行的Socket接口為范例定義了一套MicrosoftWindows下網(wǎng)絡(luò)編程接口,它不僅包含了人們所熟悉的BerkeleySocket風(fēng)格的庫函數(shù),也包含了一組針對Windows的擴(kuò)展庫函數(shù),以使程序員能充分的利用Windows消息驅(qū)動(dòng)機(jī)制進(jìn)行編程。WinSock支持單一的通信域,即Internet域。各種進(jìn)程使用這個(gè)域用Internet協(xié)議進(jìn)行通信。分為兩種套接字:流套接字:提供了雙向的、有序的、無重復(fù)并且無記錄邊界的數(shù)據(jù)流服務(wù)。數(shù)據(jù)報(bào)套接字:支持雙向的數(shù)據(jù)流,但并不保證可靠、有序、無重復(fù)。但是保留了記錄邊界,采用包交換網(wǎng)絡(luò)相似的模型來實(shí)現(xiàn)數(shù)據(jù)邊界的記錄。二、使用WinSock實(shí)現(xiàn)網(wǎng)絡(luò)通信客戶/服務(wù)器模型(c/s模型)網(wǎng)絡(luò)應(yīng)用系統(tǒng)通常是一個(gè)客戶/服務(wù)器模型,要進(jìn)行網(wǎng)絡(luò)通信,首先我們要理解什么是c/s模型。c/s模型由兩部分構(gòu)成:客戶端和服務(wù)器端。
服務(wù)器工作的大致過程服務(wù)器工作的大致過程是:建立一個(gè)服務(wù)器,開啟服務(wù)器使服務(wù)器處于監(jiān)聽狀態(tài),它檢查是否有客戶請求它的服務(wù);如果有客戶進(jìn)行請求且條件合格則接受此客戶的服務(wù)請求,即建立與客戶端的連接,此后雙方便可以傳送數(shù)據(jù)。并且服務(wù)器能同時(shí)對多個(gè)客戶端提供服務(wù)??蛻舳斯ぷ鞯拇笾逻^程客戶端工作的大致過程:客戶端向服務(wù)器提出服務(wù)請求,請求連接到服務(wù)器,如果服務(wù)器接受了它的請求,則雙方可以通信。一般情況下,由客戶主動(dòng)發(fā)起連接請求,而發(fā)起結(jié)束通信請求方則不一定。一個(gè)TCP連接的套接口對是一個(gè)定義該連接的兩個(gè)端點(diǎn)的四元組:
<本地IP地址,本地TCP端口號,遠(yuǎn)程IP地址,遠(yuǎn)程TCP端口號〉。套接口對唯一標(biāo)識一個(gè)互聯(lián)網(wǎng)上的TCP連接。
標(biāo)識每個(gè)端點(diǎn)的兩個(gè)值<IP地址,端口號>就稱為一個(gè)套接口。
若果使用無連接的通信只需要建立一個(gè)半關(guān)聯(lián),在發(fā)送和接收時(shí)指明另一半的參數(shù)就可以了。所以說無連接的通信是將數(shù)據(jù)發(fā)送到另一臺主機(jī)的指定端口。此外,不論是有連接還是無連接的通信都不需要兩端端口相同。二、WinSock的使用及重要函數(shù)講解:1Winsock的啟動(dòng)和終止
應(yīng)用程序在使用Windows
Sockets
DLL之前必須先調(diào)用函數(shù)WSAStartup()。上面的流程中我們并沒有列出該函數(shù),事實(shí)上由于winsock由DLL形式提供,為了完成一系列的初始化操作,每一個(gè)使用winsock的應(yīng)用程序都必須進(jìn)行WSAStartup()函數(shù)調(diào)用,并且只有在成功的完成調(diào)用之后才能使用scoket。
WSAStartup()函數(shù)
函數(shù)的原形如下:
int
PASCAL
FAR
WSAStartup(WORD
wVersionRequired,
LPWSADATA
lpWSAData);
wVersionRequired表示欲使用的winsock
API的版本,這是一個(gè)WORD類型的整數(shù),它的高位字節(jié)是次版本號,低位字節(jié)是主版本號;lpWSAData是指向WSADATA結(jié)構(gòu)的指針,用于返回Windows
Sockets
DLL的一些技術(shù)細(xì)節(jié)。如果初始化成功則函數(shù)返回0,否則返回各種錯(cuò)誤代碼。2建立通信連接socket()函數(shù):創(chuàng)建套接字
任何用戶要進(jìn)行通信都要調(diào)用socket()函數(shù)指定通信協(xié)議的類型,創(chuàng)建套接字。
函數(shù)的原形:int
socket(int
family,int
type,int
protocol);
參數(shù)參數(shù)family指明協(xié)議族,也就是利用它來分辨地址的類型,一般為AF_INET表示在Internet上的socket;type指明套接口類型,也即是通信的類型可以為SOCK_STREAM或SOCK_DGRAM;protocol參數(shù)說明該套接字使用的協(xié)議族中的特定協(xié)議,如果調(diào)用者不希望特別指定使用的協(xié)議,則置為0,使用默認(rèn)的連接模式。
若函數(shù)調(diào)用成功,則返回一個(gè)套接口描述字,簡稱套接字(sockfd);若調(diào)用失敗,則返回INVALID_SOCKET。
一個(gè)套接字用socket()創(chuàng)建后,它其實(shí)還沒有與任何特定的本地或目的地址相關(guān)聯(lián)。在很多情況下,應(yīng)用程序并不關(guān)心他們使用的本地地址,這時(shí)可以不調(diào)用此函數(shù),而由協(xié)議軟件為他們選擇一個(gè)。如果要使用指定的端口,則創(chuàng)建了一個(gè)套接口之后,服務(wù)器必須調(diào)用bind()函數(shù)給套接口分配一個(gè)本地協(xié)議地址,捆綁端口。
函數(shù)原形:int
bind(int
sockfd,const
struct
sockaddr
*myaddr,socklen_t
addrlen);
參數(shù)sockfd是綁定的套接字描述符,是由socket返回的;myaddr是與套接字綁定的一個(gè)本地地址結(jié)構(gòu),其長度可變,結(jié)構(gòu)隨協(xié)議族的不同而不同;addrlen是myaddr的長度。
返回0表示函數(shù)調(diào)用成功,返回-1(SOCKET_ERROR)表示出錯(cuò)。
bind()函數(shù):指定本地地址connect()函數(shù):將套接字連接到目的地址
初始創(chuàng)建的套接字并未與任何外地目的地址關(guān)聯(lián),客戶端調(diào)用connect()為套接字綁定一個(gè)永久的目的地址,將它置于已經(jīng)連接的狀態(tài)。對數(shù)據(jù)流方式的套接字,必須在傳輸數(shù)據(jù)前,調(diào)用connect()構(gòu)造一個(gè)與目的地的TCP連接,并不能構(gòu)造連接時(shí)返回一個(gè)差錯(cuò)代碼。如果是數(shù)據(jù)報(bào)方式則不是必須在傳輸數(shù)據(jù)之前調(diào)用connect。
函數(shù)原形:
int
connect(int
s,const
struct
sockaddr
*servaddr,socklen_t
addrlen);
s是本地套接字描述符;servaddr是指向?qū)Ψ教捉幼值刂方Y(jié)構(gòu)的指針,這里的套接口地址是服務(wù)器的套接口地址,包括服務(wù)器的IP地址和端口號,指明了要連接到的服務(wù)器;addrlen是對方套接字地址結(jié)構(gòu)的長度。
返回0表示調(diào)用成功,返回-1表示出錯(cuò)。
listen()函數(shù):設(shè)置等待連接狀態(tài)對于一個(gè)服務(wù)器的程序,當(dāng)申請到套接字,并調(diào)用bind()與本地地址綁定后,就應(yīng)該等待某個(gè)客戶機(jī)的請求連接。函數(shù)listen()就是把套接字置為這種狀態(tài),它僅被服務(wù)器調(diào)用,它使服務(wù)器的套接口成為一個(gè)監(jiān)聽套接口。事實(shí)上當(dāng)用socket()函數(shù)建立一個(gè)套接口時(shí),它是一個(gè)主動(dòng)套接口,也就是說它應(yīng)該調(diào)用connect()函數(shù)向服務(wù)器發(fā)起連接的套接口,函數(shù)Listen()將此套接口轉(zhuǎn)變?yōu)楸粍?dòng)套接口,使它接受客戶向它發(fā)出的連接請求。
函數(shù)原形:
int
listen(int
sockfd,int
backlog);
參數(shù)sockfd是套接字描述符;backlog是指明等待連接的隊(duì)列的最大長度,可以取1-5。
返回0表示調(diào)用成功,返回-1表示出錯(cuò)。
accept()函數(shù):接收連接請求服務(wù)器進(jìn)程使用系統(tǒng)調(diào)用socket,bind和listen創(chuàng)建一個(gè)套接字,將它綁定到知名的端口,并指定連接請求的隊(duì)列長度,進(jìn)入監(jiān)聽狀態(tài),當(dāng)有連接請求到達(dá)時(shí),服務(wù)器調(diào)用accept()接收連接請求,它返回一個(gè)新建立的連接。
函數(shù)原形:int
accept(int
sockfd,struct
sockaddr
*
cliaddr,socklen_t
*addrlen);
參數(shù)sockfd是套接字描述符;指針cliaddr用于返回請求連接的客戶方套接字地址;指針addrlen用于返回該地址結(jié)構(gòu)的長度。
如果沒有發(fā)生錯(cuò)誤,則返回新的套接字,否則返回INVALID_SOCKET。
值得注意的一點(diǎn)是,當(dāng)accept()執(zhí)行成功,它的返回值是內(nèi)核自動(dòng)生成的一個(gè)全新的描述字,它與客戶進(jìn)行數(shù)據(jù)通信,我們稱之為會(huì)話套接口。accept()參數(shù)中的scokfd是監(jiān)聽套接口,accept()返回的套接口是一個(gè)已經(jīng)連接到某個(gè)客戶套接字的已連接套接口(會(huì)話套接口)。我們一定要區(qū)分這兩種套接口。一個(gè)服務(wù)器只生成一個(gè)監(jiān)聽套接口且一直存在,直到服務(wù)器關(guān)閉。內(nèi)核則是為每個(gè)被接受的客戶創(chuàng)建一個(gè)已連接套接口,服務(wù)器完成客戶的服務(wù)時(shí),關(guān)閉與之通信的已連接套接口。3發(fā)送和接收數(shù)據(jù)當(dāng)服務(wù)器端和客戶端建立連接以后,就可以在兩臺機(jī)器之間傳送數(shù)據(jù),也即是用winsock
API函數(shù)在兩臺連接成功的機(jī)器之間進(jìn)行通信。下面我們介紹幾個(gè)傳送數(shù)據(jù)的函數(shù),無論是客戶端,還是服務(wù)器端都可以使用這些函數(shù):
在數(shù)據(jù)流方式中,一個(gè)連接建立以后,或者在數(shù)據(jù)報(bào)方式下,調(diào)用了connect()進(jìn)行了套接字與目的地址的綁定后,就可以調(diào)用send()和recv()進(jìn)行數(shù)據(jù)傳輸。send():使用連接好的
Socket
發(fā)送數(shù)據(jù)
格式:
int
send(
SOCKET
s,
const
char
FAR
*buf,
int
len,
int
flags
);
參數(shù)
s是Socket
的識別碼;buf指向發(fā)送緩沖區(qū)的首址;len是緩沖區(qū)的長度;
flags指定傳輸控制的方式,一般設(shè)為0。
傳回值:
成功
-
送出的數(shù)據(jù)的長度
失敗
-
SOCKET_ERROR
(呼叫
WSAGetLastError()
可得知原因)
此函數(shù)適用于連接的
Datagram
或
Stream
Socket
來傳送資料。
對
Datagram
Socket
而言,是
datagram
的大小超過限制,則將不會(huì)送出任何資料,并會(huì)傳回錯(cuò)誤值。
recv():自
Socket
接收數(shù)據(jù)
格式:
int
recv(
SOCKET
s,
char
FAR
*buf,
int
len,
int
flags
);
參數(shù)s是Socket
的識別碼;指針buf指向接收緩沖區(qū)的首址;len是buf
的長度
;flags指定傳輸控制的方式,一般設(shè)為0。
傳回值:
成功
-
接收到的數(shù)據(jù)長度
(若對方
Socket
已關(guān)閉,則為
0)
失敗
-
SOCKET_ERROR
(呼叫
WSAGetLastError()
可得知原因)
此函數(shù)適用于連接式的
Datagram
Socket
或
Stream
Socket。對
Stream
Socket而言,我們可以接收到目前有效的
數(shù)據(jù),但其數(shù)量不超過
len
的大小。對
Datagram
Socket
言,只取出第一個(gè)
datagram;若是該
datagram
大于使用者提供的儲存空間,那么只有該空間大小的資料被取出,多余的資料將丟失,且回復(fù)錯(cuò)誤信息。
如果我們以數(shù)據(jù)報(bào)的方式通信,由于事先不用建立連接,所以可以跳過connect()而直接用recvfrom()和sendto()兩個(gè)函數(shù)進(jìn)行通信:
recvfrom():讀取一個(gè)
Datagram,并儲存數(shù)據(jù)來源的地址。
格式:
int
recvfrom(
SOCKET
s,char
FAR
*buf,int
len,int
flags,
struct
socketaddr
FAR
*from,int
FAR*fromlen
);
參數(shù)s,buf,len,flags與send()中的相同;指針from返回?cái)?shù)據(jù)發(fā)送者的地址;fromlen是from
的大小。
傳回值:
成功
-
接收到的數(shù)據(jù)長度
(若對方
Socket
已關(guān)閉,則為
0);失敗
-
SOCKET_ERROR
(呼叫
WSAGetLastError()
可得知原因)。對
Stream
Socket而言,其作用與
recv()
相同,參數(shù)
from
及
fromlen
將不被用到。sendto():將數(shù)據(jù)送到指定的目的地。
格式:
int
sendto(
SOCKET
s,const
char
FAR
*buf,int
len,int
flags,const
struct
sockaddr
FAR
*to,int
tolen
);
參數(shù)s,buf,len,flags與send()中的相同;指針to指向數(shù)據(jù)發(fā)送的目的地址;tolen是to的大小。
傳回值:
成功
-
送出的資料長度
失敗
-
SOCKET_ERROR
(呼叫
WSAGetLastError()
可得知原因)
。
此函數(shù)適用于
Datagram
或
Stream
Socket
來傳送數(shù)據(jù)到指定的位址。對Datagram
Socket
言,若是
d
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023年重有色金屬礦產(chǎn):鋅礦資金籌措計(jì)劃書
- 2024年飼料級磷酸氫鈣項(xiàng)目資金需求報(bào)告
- 2024年度企業(yè)租賃個(gè)人車輛協(xié)議書樣本
- 委托合同:項(xiàng)目委托管理協(xié)議
- 2024年商品房代理銷售協(xié)議合同范本
- 2024年閱卷老師保密協(xié)議
- 標(biāo)準(zhǔn)工業(yè)產(chǎn)品買賣合同樣本
- 電子購銷合同范本2024年
- 建設(shè)工程石材供應(yīng)合同法律風(fēng)險(xiǎn)
- 那個(gè)星期天公開課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)
- 《幼兒教師應(yīng)用文寫作》課程標(biāo)準(zhǔn)
- 溫室氣體排放及減排策略
- 日間照料及居家養(yǎng)老服務(wù)中心運(yùn)營實(shí)施方案
- 河南省部分地區(qū)2023年中考語文一模試卷匯編:文學(xué)類文本閱讀
- 政府審計(jì)視角下國有企業(yè)股權(quán)投資風(fēng)險(xiǎn)防控研究
- 公墓宣傳推廣策劃方案
- IPC-A-610F-表面貼裝組件課件
- 家庭教育指導(dǎo)服務(wù)現(xiàn)狀調(diào)查
- 《亞里士多德》課件
- 靜脈炎及靜脈外滲的相關(guān)知識
- 《女性生殖生》課件
評論
0/150
提交評論