




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- PPR三角隱蔽閥項(xiàng)目投資可行性研究分析報(bào)告(2024-2030版)
- 養(yǎng)雞場(chǎng)安全生產(chǎn)責(zé)任制
- 安全生產(chǎn)的體會(huì)心得
- 總值班室工作職責(zé)
- 2021-2026年中國(guó)汽車(chē)零部件表面處理行業(yè)全景評(píng)估及投資規(guī)劃建議報(bào)告
- 安全生產(chǎn)的管理制度包括哪些
- 安全生產(chǎn)事故的分級(jí)和標(biāo)準(zhǔn)
- 2025年新型墻體材料行業(yè)市場(chǎng)需求分析
- 安全生產(chǎn)牌內(nèi)容都有什么
- 2025年中國(guó)點(diǎn)膠機(jī)行業(yè)市場(chǎng)發(fā)展監(jiān)測(cè)及投資戰(zhàn)略規(guī)劃研究報(bào)告
- 急性壞死性胰腺炎患者護(hù)理
- 浙江民宿報(bào)告
- 2024版國(guó)開(kāi)電大法律事務(wù)專(zhuān)科《刑法學(xué)(2)》期末考試總題庫(kù)
- 2024年中煤平朔發(fā)展集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 自由基溶液聚合生產(chǎn)工藝腈綸
- 財(cái)務(wù)用發(fā)票分割單原始憑證 發(fā)票分割單范本
- 《機(jī)械設(shè)計(jì)基礎(chǔ)》考試復(fù)習(xí)題庫(kù)(含答案)
- 鼻窒(慢性鼻炎)中醫(yī)診療方案
- 2023年法考鐘秀勇講民法講義電子版
- 試卷模擬丨北師大版數(shù)學(xué)三年級(jí)下冊(cè)期末測(cè)試卷(二)(含答案)
- 城市消防站建設(shè)標(biāo)準(zhǔn)建標(biāo)152-2021doc
評(píng)論
0/150
提交評(píng)論