2019-06-03

Socket APT
套接字為客戶和服務(wù)提供應(yīng)用進(jìn)程間通信的抽象機(jī)制

一臺主機(jī)在應(yīng)用層會有多個進(jìn)程,如何連接?
給套接字綁定端口
標(biāo)售通信端點(diǎn)(對外):IP+端口、
操作系統(tǒng)/進(jìn)程如何管理套接字(對內(nèi)):套接字描述符(socket descriptior)

Socket APT函數(shù)(WinSock)

WSAStratup:
使用Socket的應(yīng)用程序在使用Socket之前必須首先調(diào)用該函數(shù)
兩個參數(shù):
1.第一個參數(shù)知名程序請求使用的WinSock版本,其中高字節(jié)指明副版本,地位字節(jié)指明主版本
十六進(jìn)制整數(shù),如0x102表示2.1版

2.第二個參數(shù)返回實(shí)際的WinSock的版本信息
指向WSADATA結(jié)構(gòu)的指針

SOCK_DGRAM報(bào)文套接字
SOCK_STREAM流式套接字
SOCK_RAW原始套接字(需要高級權(quán)限才能使用)

TCP:可靠,面向連接,字節(jié)流傳輸,點(diǎn)對點(diǎn)
UDP:不可靠,無連接 數(shù)據(jù)報(bào)傳輸

bind函數(shù) :綁定套接字的本地端點(diǎn)地址
IP地址+端口號
參數(shù):
套接字描述符(sd)
端點(diǎn)地址(localaddr)
結(jié)構(gòu)sockaddr_in
客戶端一般不需要綁定端口

服務(wù)端需要要綁定端口

Q:一個服務(wù)器主機(jī)可能有多個IP地址,從不同網(wǎng)絡(luò)訪問可能會產(chǎn)生問題,,如何解決?

服務(wù)器應(yīng)該綁定地址通配符:INADDR_ANY,這樣只要在主機(jī)上有效的IP地址都成立

listen函數(shù) int listen(sd,queuesize);
作用:
使位于服務(wù)器端的流套接字處于監(jiān)聽狀態(tài)
僅服務(wù)端調(diào)用
僅用于面向連接的流式套接字

queuesize:設(shè)置連接請求隊(duì)列的大?。╭ueuesize)

返回值:0成功,SOCKET_ERRPOR:失敗

connect函數(shù):
connect(sd,saddr,saddrlen)
客戶端程序調(diào)用connect函數(shù)來使客戶端套接字(sd)和特定的計(jì)算機(jī)的特定端口(saddr)的套接字進(jìn)行連接
connect函數(shù)僅用于客戶端
TCP/UDP:
TCP客戶端:向指定的saddr發(fā)送請求,建立TCP連接
UDP客戶端:僅指定服務(wù)器端點(diǎn)地址

accept函數(shù):
newsock=accpet(sd,caddr,caddrlen);
服務(wù)器程序調(diào)用accept函數(shù)從處于監(jiān)聽狀態(tài)的流套接字sd的客戶端連接
請求隊(duì)列中取出排在最前的一個客戶請求,并且創(chuàng)建一個新的套接字來
和客戶套接字創(chuàng)建連接通道
僅用于TCP套接字,僅用于服務(wù)器

真正為客戶服務(wù),連接的是新的套接字
為了實(shí)現(xiàn)并發(fā)的tcp服務(wù)器

send,sendto函數(shù):用于發(fā)送數(shù)據(jù)
recv ,recvfrom:用于接受數(shù)據(jù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容