版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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( ) 客戶端指定遠(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 / 客戶Socketsockaddr_in addr, clientAddr; / 服務(wù)器的綁定地址 / 客戶地址in_addr clientIn; / 客戶IP地址int nClientAddrLen; / 客戶地址結(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è)置客戶地址結(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() 成功: 客戶IP地址是 %s, 端口是 %d, inet_ntoa(clientIn), ntohs(clientAddr.sin_port); /開(kāi)始在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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年重慶應(yīng)用技術(shù)職業(yè)學(xué)院?jiǎn)握芯C合素質(zhì)考試備考試題附答案詳解
- 2026年阜新高等專(zhuān)科學(xué)校單招綜合素質(zhì)考試備考題庫(kù)帶答案解析
- 外賣(mài)平臺(tái)商家協(xié)議2025年食品安全條款
- 土地租賃合同(農(nóng)村商業(yè))2025年費(fèi)用明細(xì)
- 2026年廣西教育學(xué)院?jiǎn)握新殬I(yè)技能筆試參考題庫(kù)帶答案解析
- 2026年黑龍江能源職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能筆試備考試題帶答案解析
- 投資合同協(xié)議(2025年退出機(jī)制約定)
- 2026年廣西建設(shè)職業(yè)技術(shù)學(xué)院?jiǎn)握芯C合素質(zhì)考試備考試題帶答案解析
- 2026年德宏師范高等專(zhuān)科學(xué)校高職單招職業(yè)適應(yīng)性考試備考題庫(kù)有答案解析
- 2026年合肥共達(dá)職業(yè)技術(shù)學(xué)院?jiǎn)握芯C合素質(zhì)筆試參考題庫(kù)帶答案解析
- 2025年湖北警官學(xué)院馬克思主義基本原理概論期末考試真題匯編
- 河道工程測(cè)量施工方案
- 2025嵐圖汽車(chē)社會(huì)招聘參考題庫(kù)及答案解析(奪冠)
- 2025河南周口臨港開(kāi)發(fā)區(qū)事業(yè)單位招才引智4人考試重點(diǎn)題庫(kù)及答案解析
- 2025年無(wú)人機(jī)資格證考試題庫(kù)+答案
- DB42-T 2462-2025 懸索橋索夾螺桿緊固力超聲拉拔法檢測(cè)技術(shù)規(guī)程
- 大學(xué)生擇業(yè)觀和創(chuàng)業(yè)觀
- 車(chē)載光通信技術(shù)發(fā)展及無(wú)源網(wǎng)絡(luò)應(yīng)用前景
- 工程倫理-形考任務(wù)四(權(quán)重20%)-國(guó)開(kāi)(SX)-參考資料
- YS/T 1148-2016鎢基高比重合金
- 蒂森克虜伯無(wú)機(jī)房MC2安裝說(shuō)明
評(píng)論
0/150
提交評(píng)論