socket 套接字(server端)

2022-07-11 16:15:11 字數 2837 閱讀 3854

一、osi七層模型

osi定義了網路互連的七層框架(物理層、資料鏈路層、網路層、傳輸層、會話層、表示層、應用層),即iso開放互連系統參考模型。如下圖所示。

每一層實現各自的功能和協議,並完成與相鄰層的介面通訊。osi的服務定義詳細說明了各層所提供的服務。某一層的服務就是該層及其下各層的一種能力,它通過介面提供給

更高一層。各層所提供的服務與這些服務是怎麼實現的無關。

每層常見的物理裝置如下:

雖然osi模型是一種接近完美的理論(注意這種模型只出現在教課書裡)這種模型是在tcp/ip協議已經成熟之後提出的,可以理解為公升級版。但是並沒有流行出來。所以,網

絡資料傳輸是tcp/ip的天下。

二、tcp/ip五層協議

每一層都呼叫它的下一層提供的網路來完成自己的需求。(如果是四層模型資料鏈路層和物理層在一層)

1、物理層:負責光電訊號傳遞方式。集線器工作在物理層。乙太網協議。

2、資料鏈路層:負責裝置之間的資料幀的傳輸和識別。交換機工作在資料鏈路層。例如網絡卡裝置的驅動,幀同步,衝突檢測,資料差錯校驗等工作。

4、傳輸層:負責兩台主機之間的資料傳輸。

5、應用層:負責應用程式之間的溝通。網路程式設計主要針對的就是應用層。

關係如下:

arp協議可實現通過ip位址獲得對應主機的實體地址(mac位址)。

rarp協議是將mac實體地址轉換成ip位址

icmp協議確認ip包是否成功到達目標位址以及通知在傳送過程中ip包被丟棄的原因。

igmp協議用來在ip 主機和與其直接相鄰的組播路由器之間建立、維護組播組成員關係。

三、什麼是socket

socket是應用層與tcp/ip協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,socket其實就是乙個門面模式,它把複雜的tcp/ip協議族隱藏在socket介面後面,

對使用者來說,一組簡單的介面就是全部,讓socket去組織資料,以符合指定的協議。 

所以,我們無需深入理解tcp/udp協議,socket已經為我們封裝好了,我們只需要遵循socket的規定去程式設計,寫出的程式自然就是遵循tcp/udp標準的。

另一方面,我們可以抽象地將socket說成ip+port,ip是用來標識網際網路中的一台主機的位置,而port是用來標識這台機器上的乙個應用程式,ip位址是配置到網絡卡上的,而port

是應用程式開啟的,ip與port的繫結就標識了網際網路中獨一無二的乙個應用程式。

四、socket工作流程

生活中的場景,你要打**給乙個朋友,先撥號,朋友聽到**鈴聲後提起**,這時你和你的朋友就建立起了連線,就可以講話了。

等交流結束,結束通話**結束此次交談。

五、socket伺服器端(server)

//

ssocket.h

#ifndef ssocket_h

#define ssocket_h#include

#include

#include

#include

in.h>#include

#include

#define port 7788

#define backlog 5

namespace

ssocket

;

class

clientsocket

;} //

namespace ssocket

#endif

af_inet是乙個位址系列,用於指定套接字可以與之通訊的位址型別(在本例中為ipv4位址)。建立套接字時,必須指定其位址族,然後只能使用該型別的位址與套

接字。套接字的特徵在於它們的域,型別和傳輸協議。常見網域名稱是:

af_unix:位址格式為unix路徑名

af_inet:位址格式為主機和埠號

ssocket::newsocket::newsocket()

if (this->fd < 0

)

std::cout

<< "

成功建立socket:

"<< this->fd <<:endl>

}

struct sockaddr

}其中,backlog引數決定了未完成佇列和已完成佇列中連線數目之和的最大值

void

ssocket::newsocket::listen()

}

其中,client.maddr和client.mlen是輸出引數。

void ssocket::newsocket::accept(clientsocket &client)

}

close為釋放套接字。

ssocket::newsocket::~newsocket()

ssocket::clientsocket::~clientsocket()

套接字 Socket 定義

套接字介面可分為三類 公認埠 註冊埠 動態和 或私有埠 套接字,簡單的說就是通訊的兩方的一種約定,用套接字中的相關函式來完成通訊過程 應用層通過傳輸層進行資料通訊時,tcp和udp會遇到同時為多個應用程式程序提供併發服務的問題。多個tcp連線或多個應用程式程序可能需要通過同乙個 tcp協議埠傳輸資料...

socket 套接字通訊

要通過internet進行通訊,至少需要一對套接字,其中乙個執行在客戶端,稱之為clientsocket,另乙個執行於伺服器端面,稱為serversocket。根據連線啟動的方式以及本地要連線的目標,套接字之間的連線過程可以分為三個步驟 伺服器監聽 客戶端請求 連線確認。伺服器監聽是指服務端套接字並...

套接字(socket) 埠

套接字 socket socket可以看成在兩個程式進行通訊連線中的乙個端點,乙個程式將一段資訊寫入socket中,該socket將這段資訊傳送給另外乙個socket中,使這段資訊能傳送到其他程式中。套接字,是支援tcp ip的網路通訊的基本操作單元,可以看做是不同主機之間的程序進行雙向通訊的端點,...