套接字編程基本原理講解

套接字編程基本原理講解

ID:9007065

大小:130.50 KB

頁(yè)數(shù):29頁(yè)

時(shí)間:2018-04-14

套接字編程基本原理講解_第1頁(yè)
套接字編程基本原理講解_第2頁(yè)
套接字編程基本原理講解_第3頁(yè)
套接字編程基本原理講解_第4頁(yè)
套接字編程基本原理講解_第5頁(yè)
資源描述:

《套接字編程基本原理講解》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。

1、套接字編程原理一、客戶機(jī)/服務(wù)器模式在網(wǎng)絡(luò)中最常用的通信模式是客戶機(jī)/服務(wù)器模式(Client/Server模式或C/S模式)。服務(wù)器方要先啟動(dòng),并監(jiān)聽指定端口,等待客戶端的請(qǐng)求,根據(jù)客戶端的請(qǐng)求提供相應(yīng)服務(wù)。二、基本套接字一般來說,要進(jìn)行網(wǎng)絡(luò)通信,必須要在網(wǎng)絡(luò)的每一端都要建立一個(gè)套接字,兩個(gè)套接字之間是可以建立連接的,也是可以無連接的,并通過對(duì)套接字的“讀”、“寫”操作實(shí)現(xiàn)網(wǎng)絡(luò)通信功能。類似于文件的打開、讀、寫、關(guān)閉的方式。套接字有三種類型:數(shù)據(jù)流套接字(SOCK_STREAM):對(duì)應(yīng)TCP協(xié)議。數(shù)據(jù)報(bào)套接字(SOCK_DG

2、RAM):對(duì)應(yīng)UDP協(xié)議。原始套接字(SOCK_RAW)。通過使用原始套接字,可以將網(wǎng)卡設(shè)為混雜模式。并且可以捕獲到的數(shù)據(jù)包不僅僅是單純的數(shù)據(jù)信息,而是包含有IP頭、TCP頭等信息頭的最原始的數(shù)據(jù)信息,這些信息保留了它在網(wǎng)絡(luò)傳輸時(shí)的原貌,通過對(duì)這些在低層傳輸?shù)脑夹畔⒌姆治隹梢缘玫礁嗑W(wǎng)絡(luò)的信息。一個(gè)完整的網(wǎng)間通信需要一個(gè)五元組來標(biāo)識(shí):(協(xié)議,本地地址,本地端口號(hào),遠(yuǎn)地地址,遠(yuǎn)地端口號(hào))三、基本套接字系統(tǒng)調(diào)用為了更好地說明套接字編程原理,下面給出幾個(gè)基本套接字系統(tǒng)調(diào)用說明。1.創(chuàng)建套接字──socket()應(yīng)用程序在使用套接字

3、前,首先必須擁有一個(gè)套接字,系統(tǒng)調(diào)用socket()向應(yīng)用程序提供創(chuàng)建套接字的手段,其調(diào)用格式如下:SOCKETPASCALFARsocket(intaf,inttype,intprotocol);參數(shù)af:指定通信發(fā)生的區(qū)域,UNIX系統(tǒng)支持的地址族有:AF_UNIX、AF_INET、AF_NS等,而DOS、WINDOWS中僅支持AF_INET,它是互連網(wǎng)區(qū)域。參數(shù)type:描述要建立的套接字的類型。參數(shù)protocol:說明該套接字使用的特定協(xié)議,如果調(diào)用者不希望特別指定使用的協(xié)議,則置為0,使用默認(rèn)的協(xié)議。根據(jù)這三個(gè)參數(shù)

4、建立一個(gè)套接字,并將相應(yīng)的資源分配給它,同時(shí)返回一個(gè)整型套接字號(hào)。socket()系統(tǒng)調(diào)用實(shí)際上指定了相關(guān)五元組中的“協(xié)議”這一元。2.指定本地地址──bind()將本地主機(jī)地址和本地端口與所創(chuàng)建的套接字號(hào)聯(lián)系起來,其調(diào)用格式如下:intPASCALFARbind(SOCKETs,conststructsockaddrFAR*name,intnamelen);參數(shù)s:是由socket()調(diào)用返回的套接字描述符(套接字號(hào))。參數(shù)name:是賦給套接字s的本地地址,其長(zhǎng)度可變,結(jié)構(gòu)隨通信域的不同而不同,TCP/IP協(xié)議使用的地址結(jié)

5、構(gòu)如下:structsockaddr_in{shortsin_family;/*AF_INET*/u_shortsin_port;/*16位端口號(hào),網(wǎng)絡(luò)字節(jié)順序*/structin_addrsin_addr;/*32位IP地址,網(wǎng)絡(luò)字節(jié)順序*/charsin_zero[8];/*保留*/}網(wǎng)絡(luò)字節(jié)順序:不同的計(jì)算機(jī)存放多字節(jié)值的順序不同,有的機(jī)器在起始地址先存放低位字節(jié),有的先存高位字節(jié)。為保證數(shù)據(jù)的正確性,在網(wǎng)絡(luò)協(xié)議中須指定網(wǎng)絡(luò)字節(jié)順序。TCP/IP協(xié)議使用16位整數(shù)和32位整數(shù)的高價(jià)先存格式,它們均含在協(xié)議頭文件中。參數(shù)n

6、amelen:表明了name的長(zhǎng)度。如果沒有錯(cuò)誤發(fā)生,bind()返回0。否則返回值SOCKET_ERROR。3.建立套接字連接──connect()與accept()connect()用于建立連接。無連接的套接字進(jìn)程也可以調(diào)用connect(),這樣就不必每次都指定目的地址。而accept()用于使服務(wù)器等待來自某客戶進(jìn)程的實(shí)際連接。intPASCALFARconnect(SOCKETs,conststructsockaddrFAR*name,intnamelen);參數(shù)s:是欲建立連接的本地套接字描述符。參數(shù)name:為指

7、向?qū)Ψ教捉幼值刂方Y(jié)構(gòu)的指針。參數(shù)namelen:對(duì)方套接字地址結(jié)構(gòu)長(zhǎng)度。如果沒有錯(cuò)誤發(fā)生,connect()返回0。否則返回值SOCKET_ERROR。SOCKETPASCALFARaccept(SOCKETs,structsockaddrFAR*addr,intFAR*addrlen);參數(shù)s:為本地套接字描述符,在用做accept()調(diào)用的參數(shù)前應(yīng)該先調(diào)用過listen()。addr:指向客戶方套接字地址結(jié)構(gòu)的指針,用來接收連接實(shí)體的地址。Addrlen:為客戶方套接字地址結(jié)構(gòu)的長(zhǎng)度。如果沒有錯(cuò)誤發(fā)生,accept()返回

8、一個(gè)SOCKET類型的值,表示接收到的套接字的描述符。否則返回值INVALID_SOCKET。accept()用于面向連接服務(wù)器。參數(shù)addr和addrlen存放客戶方的地址信息。調(diào)用前,參數(shù)addr指向一個(gè)初始值為空的地址結(jié)構(gòu),而addrlen的初始值為0;調(diào)用accept

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。