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

下載本文檔

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

文檔簡介

1、第七章 傳輸層第七節(jié) 傳輸層軟件編程方法 一、UNIX分布式進(jìn)程通信實現(xiàn)方法套接字(socket)的基本概念套接字 socket 包括主機IP地址與進(jìn)程端口號應(yīng)用層利用套接字建立進(jìn)程鏈接,實現(xiàn)數(shù)據(jù)交換套接字面向Client / Server模式設(shè)計socket的類型流套接字(stream socket)主要用于TCP協(xié)議;提供了雙向的、有序的、無重復(fù)的、無記錄邊界的數(shù)據(jù)傳輸服務(wù)。數(shù)據(jù)報套接字(datagram socket)主要用于UDP協(xié)議;提供了雙向的、無序的、有重復(fù)的、有記錄邊界的數(shù)據(jù)傳輸服務(wù)。原始套接字(raw socket)主要用于訪問底層協(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 地址類型(AF-UNIX, AF-INET, AF-NS)type 服務(wù)類型(SOCK-STREAM, SOCK-DGRAM, SOCK-RAW)protocol 使用的協(xié)議,缺省為0返回值socketid是一個整數(shù)(即socket號);指定本地地址bind( )socket( ) 實現(xiàn)創(chuàng)建socket通信的第一步,指定了協(xié)議類型,而bind( ) 給出本地地址與本地端口;bind( ) 調(diào)用的格式是

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

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

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

6、socket號;accept( ) 服務(wù)器端確認(rèn)遠(yuǎn)程主機地址與遠(yuǎn)程socket號。發(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號; buff與bufflen 發(fā)送緩沖區(qū)的指針與大??; vec

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

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

9、)sendto()Blocks until data receivedProcess replyrecvfrom()close()close()無連接C/S模式的工作流程服務(wù)器程序示例SOCKET s,clientSocket; / 監(jiān)聽Socket / 客戶Socketsockaddr_in addr, clientAddr; / 服務(wù)器的綁定地址 / 客戶地址in_addr clientIn; / 客戶IP地址int nClientAddrLen; / 客戶地址結(jié)構(gòu)長度/ 創(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)聽連接 if (listen(s, 3) != SOCKET_ERROR) /* if listen*/ / 設(shè)置客戶地址結(jié)構(gòu)長度 nClientAddrLen = sizeof(clientAddr); / 接受連

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論