下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
2、上面已經(jīng)知道網(wǎng)絡(luò)中的進程是通過socket來通信的,那socket呢?socket于–>關(guān)閉close”模式來操作。理解就是Socket就是該模式的一個實現(xiàn),socket即是一種socket函數(shù)就是對其進行的操作(讀/IO、打開、關(guān)閉,這些函數(shù)我1970212IETFRFC33中發(fā)現(xiàn)的,撰寫者為12年?!钡暮瘮?shù)接口。下面以TCP為例,介紹幾個基本的socket接口函數(shù)。int ,inttype,intsocket函數(shù)對應(yīng)于普通文件的打開操作。普通文件的打開操作返回一個文件描述字,而descripto正如可以給fopensocket的時候,也可以指定不同的參數(shù)創(chuàng)建不同的socket描述符,socket函數(shù)的三個參數(shù)分別為: faAF_LOCAL(AF_UNIX,Unixsocket、AF_ROUTE等等。協(xié)議族決定了socket的地址類型,在通信中必須采用對應(yīng)的地址,如AF_INET決定了要用ipv4地址(32位的)與端(16位的)的組合、AF_UNIX決定了要用一個絕對路徑IPPROTO_SCTP、IPPROTO_TIPCTCP傳輸協(xié)議、UDP傳輸協(xié)議、STCP傳輸協(xié)議、TIPC傳輸協(xié)議(這個協(xié)議我將會單獨開篇。注意:并不是上面的type和protocol可以隨意組合的,如SOCK_STREAMbind()socketAF_INET、AF_INET6就是把一個ipv4或ipv6地址和端組合賦給socket。intbind(intsockfd,conststructsockaddr*addr,socklen_t結(jié)構(gòu)根據(jù)地址創(chuàng)建socket時的地址協(xié)議族的不同而不同,如ipv4對應(yīng)的是:structsockaddr_in /*portinnetworkbyteorderstructin_addr /*internetaddress/*Internetaddress.structin_addr /*addressinnetworkbyteorderstructsockaddr_in6 /*AF_INET6*/ /*portnumber sin6_flowinfo;/*IPv6flowinformation*/structin6_addrsin6_addr; /*IPv6address*/ sin6_scope_id;/*ScopeID(newin2.4)structin6_addrunsigned /*IPv6address#define structsockaddr_unsa_family_tsun_family; /*AF_UNIX*/ 通常服務(wù)器在啟動的時候都會綁定一個眾所周知的地址(如ip地址+端,用于提供服會調(diào)用,而是在connect()時由系統(tǒng)隨機生成一個。主機字節(jié)序就是平常說的大端和小端模式:不同的CPU有不同的字節(jié)序類型,這些字gEndn網(wǎng)絡(luò)字節(jié)序432t0~7b~152~3b由于CPP首部中所有的二進socket的時候,請先將主機字節(jié)序轉(zhuǎn)換成為網(wǎng)絡(luò)字節(jié)序,而不要做任何假定,務(wù)必將其轉(zhuǎn)化為網(wǎng)絡(luò)字節(jié)序再賦給socket。如果作為一個服務(wù)器,在調(diào)用socket()、bind()之后就會調(diào)用listen()來這個socket,如果客戶端這時調(diào)用connect()發(fā)出連接請求,服務(wù)器端就會接收到這個請求。intlisten(intsockfd,intintconnect(intsockfd,conststructsockaddr*addr,socklen_tconnect函數(shù)的第一個參數(shù)即為客戶端的socket描述二參數(shù)為服務(wù)器的socket地址,accept()函數(shù)取接收請求,這樣連接就建立好了。之后就可以開始網(wǎng)絡(luò)I/O操作了,即類同于普通文件的讀寫I/O操作。intaccept(intsockfd,structsockaddr*addr,socklen_t針,用于返回客戶端的協(xié)議地址,第三個參數(shù)為協(xié)議地址的長度。如果aet成功,那么其返回值是由內(nèi)核自動生成的一個全新的描述字,代表與返回客戶的TCP連接。注意:acceptsocketsocket()函數(shù)生成的,稱為socket描述字;而accept函數(shù)返回的是已連接的socket描述字。一個服務(wù)器通常通常僅僅只創(chuàng)建一個socket描述字,它在該服務(wù)器的生命周期內(nèi)一直存在。內(nèi)核socket描述字,當(dāng)服務(wù)器完成了對某個客戶的服務(wù),相應(yīng)的已連接socket描述字就被關(guān)閉。了,即實現(xiàn)了網(wǎng)咯中不同進程之間的通信!網(wǎng)絡(luò)I/O操作有下面幾組:我使用recvmsg()/sendmsg()函數(shù),這兩個函數(shù)是最通用的I/O函數(shù),實際上可以把上面ssize_tread(intfd,void*buf,size_tcount);ssize_twrite(intfd,constvoid*buf,size_tcount);#include<sys/types.h>ssize_d(intsockfd,constvoid*buf,size_tlen,intflags);ssize_trecv(intsockfd,void*buf,size_tlen,intflags);ssize_dto(intsockfd,constvoid*buf,size_tlen,intconststructsockaddr*dest_addr,socklen_taddrlen);ssize_trecvfrom(intsockfd,void*buf,size_tlen,intflags,ssize_dmsg(intsockfd,conststructmsghdr*msg,intflags);ssize_trecvmsg(intsockfd,structmsghdr*msg,intflags);中斷引起的,如果是ECONNREST表示網(wǎng)絡(luò)連接出了問題?;?1,并設(shè)置errno變量。在網(wǎng)絡(luò)程序中,當(dāng)向套接字文件描述符寫時有倆種可能。錯誤。要根據(jù)錯誤類型來處理。如果錯誤為EINTR表示在寫的時候出現(xiàn)了中斷錯誤。如果為EPIPE表示網(wǎng)絡(luò)連接出現(xiàn)了問題(對方已經(jīng)關(guān)閉了連接)。其它的我就不一一介紹這幾對I/O函數(shù)了,具體參見man文檔或者baidu、,下面的例子中將使用到send/recv。#include<unistd.h>intclose(intfd);注意:close操作只是使相應(yīng)socket描述字的計數(shù)-1,只有當(dāng)計數(shù)為0的時候,才會觸發(fā)TCP客戶端向服務(wù)器發(fā)送終止連接請求。客戶端向服務(wù)器發(fā)送一個SYN客戶端再想服務(wù)器發(fā)一個確認(rèn)ACKconnect時,觸發(fā)了連接請求,向服務(wù)器發(fā)送了SYNJ包,這時connect進入阻塞狀態(tài);服務(wù)器到連接請求,即收到SYNJ包,調(diào)用accept函數(shù)接收請求向客戶端發(fā)送SYNK,ACKJ+1accept進入阻塞狀態(tài);客戶端收到服務(wù)器的SYNK,AC
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 品牌用戶反饋處理流程
- 2025年家庭醫(yī)生簽約服務(wù)培訓(xùn)試題及答案
- 2025年檢驗科疾控面試題及答案
- 2025年安全生產(chǎn)風(fēng)險分級管控考試題庫及答案(安全風(fēng)險評估題)
- 2025年安全生產(chǎn)事故案例分析模擬試卷及答案(事故原因分析與預(yù)防措施)
- 第3課時與圓有關(guān)的計算
- 初中英語演講中邏輯思維培養(yǎng)與思維導(dǎo)圖應(yīng)用課題報告教學(xué)研究課題報告
- 物聯(lián)網(wǎng)背景下智慧校園學(xué)習(xí)環(huán)境動態(tài)構(gòu)建策略研究與實踐教學(xué)研究課題報告
- 人工智能教育微課資源開發(fā)中的知識產(chǎn)權(quán)保護問題研究教學(xué)研究課題報告
- 大學(xué)化學(xué)教學(xué)中綠色化學(xué)理念的融入研究教學(xué)研究課題報告
- 2025屆山西省陽泉市陽泉中學(xué)高二生物第一學(xué)期期末質(zhì)量檢測試題含解析
- 毒理學(xué)中的替代測試方法
- DB3502-Z 5026-2017代建工作規(guī)程
- 廣東省大灣區(qū)2023-2024學(xué)年高一上學(xué)期期末生物試題【含答案解析】
- 第四單元地理信息技術(shù)的應(yīng)用課件 【高效課堂+精研精講】高中地理魯教版(2019)必修第一冊
- 魯科版高中化學(xué)必修一教案全冊
- 提高隧道初支平整度合格率
- 2023年版測量結(jié)果的計量溯源性要求
- GB 29415-2013耐火電纜槽盒
- 中國古代經(jīng)濟試題
- 軟件定義汽車:產(chǎn)業(yè)生態(tài)創(chuàng)新白皮書
評論
0/150
提交評論