計(jì)算機(jī)網(wǎng)絡(luò)課件:4_7_7 傳輸層軟件編程方法_第1頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)課件:4_7_7 傳輸層軟件編程方法_第2頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)課件:4_7_7 傳輸層軟件編程方法_第3頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)課件:4_7_7 傳輸層軟件編程方法_第4頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)課件:4_7_7 傳輸層軟件編程方法_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第七章 傳輸層第七節(jié) 傳輸層軟件編程方法 一、UNIX分布式進(jìn)程通信實(shí)現(xiàn)方法套接字(socket)的基本概念套接字 socket 包括主機(jī)IP地址與進(jìn)程端口號(hào)應(yīng)用層利用套接字建立進(jìn)程鏈接,實(shí)現(xiàn)數(shù)據(jù)交換套接字面向Client / Server模式設(shè)計(jì)socket的類(lèi)型流套接字(stream socket)主要用于TCP協(xié)議;提供了雙向的、有序的、無(wú)重復(fù)的、無(wú)記錄邊界的數(shù)據(jù)傳輸服務(wù)。數(shù)據(jù)報(bào)套接字(datagram socket)主要用于UDP協(xié)議;提供了雙向的、無(wú)序的、有重復(fù)的、有記錄邊界的數(shù)據(jù)傳輸服務(wù)。原始套接字(raw socket)主要用于訪問(wèn)底層協(xié)議,如IP、ICMP與IGMP等協(xié)議。二、

2、UNIX 套接字相關(guān)調(diào)用 創(chuàng)建套接字socket( )使用套接字前,應(yīng)用程序使用socket( ) 創(chuàng)建它; socketid = socket(af, type, protocol)參數(shù):af 地址類(lèi)型(AF-UNIX, AF-INET, AF-NS)type 服務(wù)類(lèi)型(SOCK-STREAM, SOCK-DGRAM, SOCK-RAW)protocol 使用的協(xié)議,缺省為0返回值socketid是一個(gè)整數(shù)(即socket號(hào));指定本地地址bind( )socket( ) 實(shí)現(xiàn)創(chuàng)建socket通信的第一步,指定了協(xié)議類(lèi)型,而bind( ) 給出本地地址與本地端口;bind( ) 調(diào)用的格式是

3、: bind(socketid, *localaddr, addrelen)參數(shù): socketid 本地socket號(hào); localaddr 本地地址結(jié)構(gòu)體指針(IP地址與端口號(hào)); addrelen 地址結(jié)構(gòu)的長(zhǎng)度。同意建立socket連接listen( )listen( ) 完全用于面向連接的傳輸服務(wù),它表示同意接受socket連接;listen( ) 調(diào)用的格式是: listen(socketid, quelen);參數(shù): socketid本地socket號(hào),表示server在此 socket號(hào)上接受服務(wù)請(qǐng)求; quelen允許請(qǐng)求的隊(duì)列長(zhǎng)度。建立socket連接connect( )

4、與 accept( )connect( ) 與accept( ) 調(diào)用完成兩個(gè)相關(guān)連接;一是指在兩個(gè)socket之間溝通,二是在傳輸層建立連接(如TCP連接);accept( ) 調(diào)用的格式: newsock = accept(socketid, clientaddr, paddrlen);參數(shù): socketid 本地監(jiān)聽(tīng)socket號(hào); clientaddr 返回的client的地址; paddrlen client socket的長(zhǎng)度。newsock是調(diào)用后,返回的新socket號(hào),用于通信。connect( ) 調(diào)用的格式: connect(socketid, name, namele

5、n);參數(shù): socketid 本地socket號(hào) name server的地址 namelen server socket長(zhǎng)度accept ( )完全用于面向連接的傳輸服務(wù);connect( ) 主要用于面向連接的傳輸服務(wù),無(wú)連接的socket進(jìn)程也可以調(diào)用connect( ) ,通知操作系統(tǒng)將來(lái)自指定socket的數(shù)據(jù)送到本socket。通過(guò)socket( ) 、bind( ) 、connect( ) 與accept( ) 調(diào)用,可以建立一個(gè)完整的五元組:socket( ) 指定協(xié)議;bind( ) 服務(wù)器端指定本地的地址與socket號(hào);connect( ) 客戶(hù)端指定遠(yuǎn)程主機(jī)地址與遠(yuǎn)程

6、socket號(hào);accept( ) 服務(wù)器端確認(rèn)遠(yuǎn)程主機(jī)地址與遠(yuǎn)程socket號(hào)。發(fā)送數(shù)據(jù)write( )、writev( ) 、send( )與sendto( ) write( )、writev( ) 、send( ) 是面向連接的傳輸,調(diào)用的格式:緩沖發(fā)送:write(socketid, buff, bufflen);集中發(fā)送:writev(socketid, vector, vectorlen);可控緩沖發(fā)送:send(socketid, buff, bufflen, flags);參數(shù): socketid 本地socket號(hào); buff與bufflen 發(fā)送緩沖區(qū)的指針與大小; vec

7、tor與vectorlenI/O向量表的指針與大小; flags用于區(qū)分write( ) 與send( )。sendto( ) 用于無(wú)連接傳輸,調(diào)用的格式是: sendto(socketid, buff, bufflen, flags, toaddr, toaddren);參數(shù): socketid 本地socket號(hào); buff與bufflen 發(fā)送緩沖區(qū)的指針與大小; toaddr與toaddrlen接收主機(jī)的地址與地址長(zhǎng)度; 接收數(shù)據(jù)read( )、readv( ) 、 recv( )與recvfrom( )接收數(shù)據(jù)的socket調(diào)用中:read( )、readv( )與recv( ) 面

8、向連接傳輸;recvfrom( ) 無(wú)連接傳輸;三、工作流程與程序示例面向連接的C/S模式工作流程;面向無(wú)連接的C/S模式的工作流程。面向連接C/S模式工作流程socket()bind()listen()accept()write()read()close()write()socket()read()close()connect()read()建立連接數(shù)據(jù)請(qǐng)求數(shù)據(jù)響應(yīng)斷連指示ClientServerServersocket()bind()recvfrom()Blocks until data receivedProcess requestsendto()Clientsocket()(bind(

9、)sendto()Blocks until data receivedProcess replyrecvfrom()close()close()無(wú)連接C/S模式的工作流程服務(wù)器程序示例SOCKET s,clientSocket; / 監(jiān)聽(tīng)Socket / 客戶(hù)Socketsockaddr_in addr, clientAddr; / 服務(wù)器的綁定地址 / 客戶(hù)地址in_addr clientIn; / 客戶(hù)IP地址int nClientAddrLen; / 客戶(hù)地址結(jié)構(gòu)長(zhǎng)度/ 創(chuàng)建流Sockets = socket(AF_INET, SOCK_STREAM, 0);if (s != INVAL

10、ID_SOCKET) / 填充地址信息 addr.sin_family = AF_INET; addr.sin_port = htons(2000); addr.sin_addr.s_addr = htonl(INADDR_ANY); / 綁定Socket if (bind(s, (sockaddr*)&addr, sizeof(addr) != SOCKET_ERROR) / 監(jiān)聽(tīng)連接 if (listen(s, 3) != SOCKET_ERROR) /* if listen*/ / 設(shè)置客戶(hù)地址結(jié)構(gòu)長(zhǎng)度 nClientAddrLen = sizeof(clientAddr); / 接受連

11、接 clientSocket = accept(s, (sockaddr*)&clientAddr, &nClientAddrLen); if (clientSocket = INVALID_SOCKET) printf(accept() 調(diào)用錯(cuò)誤:%d, WSAGetLastError(); else memcpy(&clientIn, &clientAddr.sin_addr.s_addr, 4); printf(accept() 成功: 客戶(hù)IP地址是 %s, 端口是 %d, inet_ntoa(clientIn), ntohs(clientAddr.sin_port); /開(kāi)始在clientSocket上接收/發(fā)送數(shù)據(jù) 客戶(hù)同服務(wù)器建立連接示例SOCKET s;sockaddr_in serverAddr;s = socket(AF_INET, SOCK_STREAM, 0);serverAddr.sin_family = AF_INET;serverAddr.sin_port = htons(2000

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論