




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
TCP通信網(wǎng)絡(luò)通信主機---主機主機---服務(wù)器主機---服務(wù)器---主機網(wǎng)絡(luò)字節(jié)序--使用大字節(jié)序htonl(x)long主機序轉(zhuǎn)網(wǎng)絡(luò)序htons(x)short主機序轉(zhuǎn)網(wǎng)絡(luò)序TCP通信TCP通信流程TCP通信創(chuàng)建套接字#include<sys/socket.h>intsocket(intdomain,inttype,intprotocol)返回值:套接字domain協(xié)議族type套接字類型protocol套接字協(xié)議TCP通信套接字SOCKET像操作文件描述符一樣操作套接字雙向通信接口,起源于管道比管道功能更強,應(yīng)用更廣泛支持read,write等操作用于收發(fā)數(shù)據(jù)TCP通信socket創(chuàng)建套接字---domainPF_UNIX,PF_LOCAL本地通信PF_INETIPV4協(xié)議PF_INET6IPV6協(xié)議PF_IPXNovell公司的IPC通信協(xié)議PF_NETLINK與內(nèi)核間的接口PF_X25ITU-TX.25/ISO-8208PF_AX25無線AX.25協(xié)議PF_ATMPVC訪問原始ATM的PVC(永久虛連接)PF_APPLETALK蘋果公司的Appletalk協(xié)議PF_PACKET底層包接口TCP通信socket創(chuàng)建套接字---typeSOCK_STREAM
提供面向連接的,有序的,可靠數(shù)據(jù)流TCPSOCK_DGRAM
支持數(shù)據(jù)報UDPSOCK_SEQPACKET提供基于連接的有序的,可靠數(shù)據(jù)報通信SOCK_RAW
對原始網(wǎng)絡(luò)協(xié)議訪問SOCK_RDM提供可靠的數(shù)據(jù)報層,不保證有序性SOCK_PATET已廢棄TCP通信套接字SOCKET類型SOCK_STREAM流套接字:使用TCP協(xié)議。提供面向連接的,有序的,可靠的數(shù)據(jù)通信流。如telnet,http等SOCK_DGRAM數(shù)據(jù)報套接字:使用UDP協(xié)議。提供無連接的,無序的,不保證可靠性的數(shù)據(jù)通信流。如tftp,bootp等SOCK_RAW原始流套接字:收發(fā)原始數(shù)據(jù)包,應(yīng)用于底層協(xié)議開發(fā),進行底層操作只有root用戶才有權(quán)限創(chuàng)建這個socketTCP通信socket創(chuàng)建套接字---protocol<netinet/in.h>IPPROTO_IP(0):接受所有IP數(shù)據(jù)包IPPROTO_ICMP:ICMP協(xié)議(ping)IPPROTO_TCP:TCP協(xié)議IPPROTO_UDP:UDP協(xié)議IPPROTO_RAW:RAW只能發(fā)送包,且需要自己填寫IP頭,計算校驗和TCP通信綁定套接字intbind(intsockfd,structsockaddr*myAddr,socklen_taddrLen)sockfd套接字描述符myAddr主機地址addrLensockaddr結(jié)構(gòu)體大小實現(xiàn)本機地址(協(xié)議族+IP+端口)與套接字綁定,收發(fā)消息即讀寫套接字文件描述符TCP通信套接字地址structsockaddr{u_shortsa_family;//協(xié)議族charsa_data[14];//協(xié)議地址}對于不同的協(xié)議族,協(xié)議地址sa_data[14]有不同的描述方式TCP通信套接字地址AF_INET協(xié)議族的協(xié)議地址structsockaddr_in{shortsin_family;/*地址族AF_INET*/u_shortsin_port;/*端口號*/structin_addrsin_addr;/*32位IP地址*/charsin_zero[8];/*預(yù)留*/}structin_addr{u_longs_addr;}TCP通信IP地址轉(zhuǎn)換#include<arpa/inet.h>ulonginet_addr(char*pAddr)字符串IP轉(zhuǎn)整數(shù)IPintinet_aton(char*pAddr,structin_addr*pInAddr)字符串IP轉(zhuǎn)整數(shù)IPchar*inet_ntoa(structin_addrinAddr)整數(shù)IP轉(zhuǎn)字符串IPTCP通信字節(jié)序轉(zhuǎn)換網(wǎng)絡(luò)字節(jié)序:大字節(jié)序主機字節(jié)序:x86:小字節(jié)序ppc:大字節(jié)序主機序轉(zhuǎn)網(wǎng)絡(luò)序ulonghtonl(ulonghost)ushorthtons(ushorthost)網(wǎng)絡(luò)序轉(zhuǎn)主機序ulongntohl(ulongnet)ushortntohs(ushortnet)TCP通信監(jiān)聽端口intlisten(intsockfd,intbacklog)sockfd監(jiān)聽的套接字backlog套接字接收的最大連接數(shù),超出則向客戶端發(fā)出ECONNEREFUSED錯誤TCP通信連接處理intaccept(intsockfd,structsockaddr*addr,socklen_t*addrlen)阻塞,等待接收客戶端連接申請接收成功,則創(chuàng)建套接字,用于發(fā)送消息給客戶端addr獲取到客戶端地址addrlen獲取到客戶端地址大小sockfd設(shè)置為非阻塞的情況,未接收到連接申請,則返回錯誤TCP通信關(guān)閉套接字1:close(sockfd)同文件操作關(guān)閉時,只是將套接字訪問計數(shù)器-1,計數(shù)器為0時真正關(guān)閉用于創(chuàng)建子進程進行并發(fā)管理2:shutdown(sockfd,how)按需關(guān)閉套接字SHUT_RD(0):關(guān)閉讀功能,丟棄接收到的數(shù)據(jù)SHUT_WR(1):關(guān)閉寫功能,不能發(fā)送數(shù)據(jù)SHUT_RDWR(2):徹底關(guān)閉套接字連接TCP通信客戶端通信連接intconnect(intsockfd,structsockaddr*srvaddr,intaddrlen)sockfd創(chuàng)建的用于通信套接字srvaddr接收端地址addrlen地址結(jié)構(gòu)體大小TCP通信發(fā)送數(shù)據(jù)write(intsockfd,void*buf,size_tlen)send(intsockfd,void*msg,intlen,intflags)flags標志一般填0,特殊情況下用法如下TCP通信發(fā)送數(shù)據(jù)的發(fā)送標志flagsMSG_CONFIRM通知鏈路層,即將收到回應(yīng),鏈路層未收到回應(yīng),則會定期探測鄰居消息(只能用于SOCK_DGRAM和SOCK_RAW)MSG_DONTROUTE不通過網(wǎng)關(guān)發(fā)送數(shù)據(jù),只發(fā)送到同一子網(wǎng)計算機MSG_DONTWAIT使用非阻塞操作,阻塞則返回EAGAIN錯誤TCP通信發(fā)送數(shù)據(jù)的發(fā)送標志flagsMSG_EOR結(jié)束記錄(SOCK_SEQPACKET時使用)MSG_MORE還有后續(xù)數(shù)據(jù)要發(fā)送,效果相當于套接字使用了TCP_CORK屬性。通知內(nèi)核,這個幀的數(shù)據(jù)還沒發(fā)完,后續(xù)數(shù)據(jù)發(fā)送后,這個數(shù)據(jù)才能發(fā)送出去。MSG_OOB
發(fā)送帶外數(shù)據(jù)。提高優(yōu)先級,先于其他數(shù)據(jù)進行發(fā)送TCP通信接收消息read(intsockfd,void*buf,size_tlen)recv(intsockfd,void*buf,size_tlen,intflags)flags標志一般填0,特殊情況下用法如下TCP通信接收消息的接收標志flagsMSG_DONTWAIT非阻塞操作,阻塞則返回EAGAIN錯誤MSG_OOB接收帶外數(shù)據(jù)MSG_PEEK只查看消息,不從緩沖區(qū)刪除數(shù)據(jù)MSG_TRUNC返回包的真實長度(只用于流套接字)MSG_WAITALL等待接收到的數(shù)據(jù)長度為len后才返回TCP通信服務(wù)端例程:等待(被動)接收發(fā)送1:創(chuàng)建socket:socket()2:綁定端口:bind()3:監(jiān)聽端口:listen()4:接受連接:accept()5:讀取消息:read()6:發(fā)送消息:write()7:關(guān)閉套接字:close()TCP通信客戶端例程:主動發(fā)送接收1:創(chuàng)建socket:socket()2:連接服務(wù)端:connect()3:發(fā)送數(shù)據(jù):write()4:接受結(jié)果:read()5:關(guān)閉套接字:close()TCP通信UDP通信UDP通信流程TCP通信UDP通信沒有固定連接客戶端發(fā)完包,就不管了,也不知道服務(wù)端是不是收到了UDP通信發(fā)送消息sendto(intsockfd,void*buf,size_tlen,intflags,structsockaddr*to,socklen_ttolen);UDP沒有accept創(chuàng)建新的通信fd,需要指定目標地址函數(shù)可以用于TCP通信,后面兩個參數(shù)會忽略UDP通信接收消息recvfrom(intsockfd,void*buf,size_tlen,intflags,sturctsockaddr*from,socklen_t*fromlen)UDP沒有accept函數(shù)來獲取對端地址,這里增加了2個參數(shù)函數(shù)可以用于TCP通信TCP通信TCP通信raw底層數(shù)據(jù)報TCP通信TCP通信TCP通信套接字選項intgetsockopt(intfd,intlevel,intoptname,void*optVal,int*optLen)獲取套接字intsetsockopt(intfd,intlevel,intoptname,void*optVal,intoptLen)fd:套接字idlevel:選項作用的套接字層級optname:選項名optVal:選項值optLen:選項值長度TCP通信套接字層級levelSOL_SOCKETsocket層次IPPROTO_IPIP協(xié)議層次IPPROTO_TCPTCP協(xié)議層次TCP通信SOL_SOCKET層的選項(默認都是int值)SO_DEBUG:調(diào)試追蹤SO_REUSEADDR:重用本地地址SO_RESUEPORT:重用本地端口SO_KEEPALIVE:周期性測試線路連接情況(心跳包)SO_DONTROUTE:不經(jīng)過路由機制發(fā)送數(shù)據(jù)SO_LINGER:有數(shù)據(jù)發(fā)送則關(guān)閉延時(structlinger)SO_BROADCAST:支持發(fā)送數(shù)據(jù)報廣播SO_OOBINLINE:帶外數(shù)據(jù)和正常數(shù)據(jù)放在同一個隊列SO_SNDBUF:發(fā)送數(shù)據(jù)緩沖區(qū)大小TCP通信SOL_SOCKET層的選項SO_RCVBUF:接收數(shù)據(jù)緩沖
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位維修家具合同范本
- 寫字樓招商服務(wù)合同范例
- 共享花園出租合同范本
- 單位設(shè)備維修合同范本
- 兼職上課合同范本
- 代客操盤合同 合同范本
- 人民醫(yī)院護士聘用合同范本
- 醫(yī)用制氧機轉(zhuǎn)讓合同范本
- 借款房屋合同范本
- 養(yǎng)生館三個合伙人合同范本
- 2025年中國國投高新產(chǎn)業(yè)投資集團招聘筆試參考題庫含答案解析
- 2024-2025學年小學美術(shù)一年級下冊(2024)嶺南版(2024)教學設(shè)計合集
- 《研學旅行課程設(shè)計》課件-研學課程設(shè)計計劃
- 年產(chǎn)10噸功能益生菌凍干粉的工廠設(shè)計改
- 初中三角函數(shù)計算題100道
- 蘇州大學應(yīng)用技術(shù)學院財務(wù)管理
- 2022年新目標英語七年級期末考試質(zhì)量分析
- 北師大版五年級數(shù)學下冊導(dǎo)學案全冊
- 臺球俱樂部助教制度及待遇
- 醫(yī)院護士勞動合同
- 醫(yī)師聘用證明.doc
評論
0/150
提交評論