socket

第一部分概念理解

1.什么是socket

socket稱為"嵌套字",是用于網(wǎng)絡(luò)通信的方法。它的實質(zhì)并不是一種協(xié)議,沒有規(guī)定計算機(jī)應(yīng)當(dāng)怎么樣傳遞消息,只是給程序員提供了一個發(fā)送消息的接口,程序員使用這個接口提供的方法,發(fā)送與接收消息。

2.通信過程

每一個應(yīng)用或者說服務(wù),都有一個端口。比如DNS的53端口,http的80端口。我們能由DNS請求到查詢信息,是因為DNS服務(wù)器時時刻刻都在監(jiān)聽53端口,當(dāng)收到我們的查詢請求以后,就能夠返回我們想要的IP信息。所以,從程序設(shè)計上來講,應(yīng)該包含以下步驟:

Socket通信過程如下:

1.服務(wù)端利用Socket監(jiān)聽端口;
2.客戶端發(fā)起連接;
3.服務(wù)端返回信息,建立連接,開始通信;
4.客戶端,服務(wù)端斷開連接。

第二部分、各協(xié)議的區(qū)別

TCP/IP SOCKET HTTP

網(wǎng)絡(luò)七層由下往上分別為物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會話層、表示層和應(yīng)用層。

其中物理層、數(shù)據(jù)鏈路層和網(wǎng)絡(luò)層通常被稱作媒體層,是網(wǎng)絡(luò)工程師所研究的對象;

傳輸層、會話層、表示層和應(yīng)用層則被稱作主機(jī)層,是用戶所面向和關(guān)心的內(nèi)容。

http協(xié)議 對應(yīng)于應(yīng)用層
tcp協(xié)議 對應(yīng)于傳輸層
ip協(xié)議 對應(yīng)于網(wǎng)絡(luò)層

三者本質(zhì)上沒有可比性。 何況HTTP協(xié)議是基于TCP連接的。

TCP/IP是傳輸層協(xié)議,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸;而HTTP是應(yīng)用層協(xié)議,主要解決如何包裝數(shù)據(jù)。

我們在傳輸數(shù)據(jù)時,可以只使用傳輸層(TCP/IP),但是那樣的話,由于沒有應(yīng)用層,便無法識別數(shù)據(jù)內(nèi)容,如果想要使傳輸?shù)臄?shù)據(jù)有意義,則必須使用應(yīng)用層協(xié)議,應(yīng)用層協(xié)議很多,有HTTP、FTP、TELNET等等,也可以自己定義應(yīng)用層協(xié)議。WEB使用HTTP作傳輸層協(xié)議,以封裝HTTP文本信息,然后使用TCP/IP做傳輸層協(xié)議將它發(fā)送到網(wǎng)絡(luò)上。

Socket是對TCP/IP協(xié)議的封裝,Socket本身并不是協(xié)議,而是一個調(diào)用接口(API),通過Socket,我們才能使用TCP/IP協(xié)議。

socket原理

概念

套接字(socket)是通信的基石,是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元。它是網(wǎng)絡(luò)通信過程中端點(diǎn)的抽象表示,包含進(jìn)行網(wǎng)絡(luò)通信必須的五種信息:連接使用的協(xié)議,本地主機(jī)的IP地址,本地進(jìn)程的協(xié)議端口,遠(yuǎn)地主機(jī)的IP地址,遠(yuǎn)地進(jìn)程的協(xié)議端口。

應(yīng)用層通過傳輸層進(jìn)行數(shù)據(jù)通信時,TCP會遇到同時為多個應(yīng)用程序進(jìn)程提供并發(fā)服務(wù)的問題。多個TCP連接或多個應(yīng)用程序進(jìn)程可能需要通過同一個 TCP協(xié)議端口傳輸數(shù)據(jù)。為了區(qū)別不同的應(yīng)用程序進(jìn)程和連接,許多計算機(jī)操作系統(tǒng)為應(yīng)用程序與TCP/IP協(xié)議交互提供了套接字(Socket)接口。應(yīng)用層可以和傳輸層通過Socket接口,區(qū)分來自不同應(yīng)用程序進(jìn)程或網(wǎng)絡(luò)連接的通信,實現(xiàn)數(shù)據(jù)傳輸?shù)牟l(fā)服務(wù)。

建立

建立Socket連接至少需要一對套接字,其中一個運(yùn)行于客戶端,稱為ClientSocket,另一個運(yùn)行于服務(wù)器端,稱為ServerSocket。

套接字之間的連接過程分為三個步驟:服務(wù)器監(jiān)聽,客戶端請求,連接確認(rèn)。
1.服務(wù)器監(jiān)聽:服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實時監(jiān)控網(wǎng)絡(luò)狀態(tài),等待客戶端的連接請求。
2.客戶端請求:指客戶端的套接字提出連接請求,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號,然后就向服務(wù)器端套接字提出連接請求。
3.連接確認(rèn):當(dāng)服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求時,就響應(yīng)客戶端套接字的請求,建立一個新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,雙方就正式建立連接。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請求。

基本TCP客戶—服務(wù)器程序設(shè)計基本框架

常見的套接字的創(chuàng)建方式

常用的Socket類型有兩種:流式Socket(SOCK_STREAM)和數(shù)據(jù)報式Socket(SOCK_DGRAM)。流式是一種面向連接的Socket,針對于面向連接的TCP服務(wù)應(yīng)用;數(shù)據(jù)報式Socket是一種無連接的Socket,對應(yīng)于無連接的UDP服務(wù)應(yīng)用

1.創(chuàng)建嵌套字
socket(int af,int type,int protocol);

socket函數(shù)接受3個參數(shù).第一個參數(shù)(af)指定地址族,對于TCP/IP協(xié)議的套接字,它只能是AF_INET(也可以寫成PF_INET);第二個參數(shù)(type)指定Socket類型,對于1.1版本的Socket,他只支持兩種類型的套接字,SOCKE_STREAM指定產(chǎn)生流式套接字,SOCK_DGRAM產(chǎn)生數(shù)據(jù)報套接字;第三個參數(shù)(protocol)是與特定的地址家族相關(guān)的協(xié)議,如果指定為0,那么系統(tǒng)就會根據(jù)地址格式和套接類別,自動選擇一個合適的協(xié)議.這是推薦使用的一種選擇協(xié)議的方法.

如果socket函數(shù)調(diào)用成功,他就會返回一個新的socket數(shù)據(jù)類型的套接字描述符;如果調(diào)用失敗,這個函數(shù)返回一個INVALID_SOCKET值,錯誤信息可以通過WSAGetLastError函數(shù)返回.

2.建立地址與嵌套字的關(guān)系
bind(sockid, local addr, addrlen)
3.服務(wù)器端監(jiān)聽客戶端請求
listen( Sockid ,quenlen)

建立服務(wù)器/客戶端的連接 (面向連接TCP)

1.客戶端請求連接
Connect(sockid, destaddr, addrlen)
2.服務(wù)器端等待從編號為Sockid的Socket上接收客戶連接請求
newsockid=accept(Socked,Clientaddr, paddrlen)

發(fā)送/接收數(shù)據(jù)

1.面向連接:
send(sockid, buff, bufflen) 
recv( )
2.面向無連接:
sendto(sockid,buff,…,addrlen) 
recvfrom( )

釋放套接字

close(socked)
最后編輯于
?著作權(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)容

  • 一: 網(wǎng)絡(luò)各個協(xié)議:TCP/IP、SOCKET、HTTP 網(wǎng)絡(luò)七層由下往上分別為物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層...
    iYeso閱讀 1,513評論 0 13
  • 1.1 TCP/IP協(xié)議組 TCP/IP協(xié)議(傳輸控制協(xié)議)由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成 IP層負(fù)責(zé)...
    F麥子閱讀 2,930評論 0 25
  • 一、網(wǎng)絡(luò)各個協(xié)議:TCP/IP、SOCKET、HTTP等 網(wǎng)絡(luò)七層由下往上分別為物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層...
    杯水救車薪閱讀 2,368評論 0 17
  • “你最大的錯誤,是在16歲那年選擇不相信愛你的哥哥;是現(xiàn)在拋下我、獨(dú)自一人離開?!眲≈兴龑疾〉乃f。 有點(diǎn)小感慨...
    日月淺言閱讀 195評論 0 0
  • 作業(yè)一:1 作業(yè)二: 作業(yè)三:
    飛揚(yáng)_cc7c閱讀 259評論 1 2

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