網路程式設計 socket相關概念

2021-10-20 18:09:36 字數 2478 閱讀 1018

socket介紹

socket位址

了解網路程式設計需要先了解計算機通訊中位元組的儲存順序

考慮32位機,cpu累加器一次能裝載4位元組。這4位元組在記憶體的排列順序影響被累加器裝載成的整數值。

位元組序分為大端位元組序(big-endian)和小端位元組序(little-endian)。傳送端總是要把資料轉換位大端位元組序傳送

假設記憶體增加方向從左往右,12345678在記憶體中的儲存格式如下

位元組序轉換函式封裝在bsd socket中,標頭檔案是#include

轉換埠

轉換ip

其中 socket用於不同主機間程序的通訊

socket包含ip位址和埠

socket通訊分為伺服器端和客戶端

socket套接字,是對網路上不同主機上的應用程序之間進行雙向通訊的斷點的抽象。套接字就是網路上程序通訊的一端,提**用層程序利用網路協議交換資料的機制

socket 可以看成是兩個網路應用程式進行通訊時,各自通訊連線中的端點,這是乙個邏輯上的概念。它是網路環境中程序間通訊的 api,也是可以被命名和定址的通訊端點,使用中的每乙個套接字都有其型別和乙個與之相連程序。

在 linux 環境下,socket用於表示程序間網路通訊的特殊檔案型別。本質為核心借助緩衝區形成的偽檔案。可以用檔案描述符引用。

socket位址其實是乙個結構體,封裝埠號和ip等資訊

socket位址包括通用socket位址和專用socket位址

socket 網路程式設計介面中表示 socket 位址的是結構體 sockaddr,定義如下

#include

struct sockaddr

;typedef

unsigned

short

int sa_family_t;

sa_family 成員是位址族型別(sa_family_t)的變數。位址族型別通常與協議族型別對應。常見的協議

族(protocol family,也稱 domain)和對應的位址族入下所示:

巨集 pf_* 和 af_* 都定義在 bits/socket.h 標頭檔案中,且後者與前者有完全相同的值,所以二者通常混

用。sa_data 成員用於存放 socket 位址值。但是,不同的協議族的位址值具有不同的含義和長度,如下所

示:

14 位元組的 sa_data 根本無法容納多數協議族的位址值。因此,linux 定義了下面這個新的

通用的 socket 位址結構體,這個結構體不僅提供了足夠大的空間用於存放位址值,而且是記憶體對齊的。

#include

struct sockaddr_storage

;typedef

unsigned

short

int sa_family_t;

很多網路程式設計函式誕生早於 ipv4 協議,那時候都使用的是 struct sockaddr 結構體,為了向前相容,現在sockaddr 退化成了(void *)的作用,傳遞乙個位址給函式,至於這個函式是 sockaddr_in 還是sockaddr_in6,由位址族確定,然後函式內部再強制型別轉化為所需的位址型別。

通用socket結構體並不好用。在設定和獲取ip位址和埠號的時候都需要執行繁瑣的位操作。因此linux為各個協議族提供了專用的socket結構體。

#include

struct sockaddr_un

;

#include

struct sockaddr_in

;struct in_addr

;struct sockaddr_in6

;typedef

unsigned

short uint16_t;

typedef

unsigned

int uint32_t;

typedef uint16_t in_port_t;

typedef uint32_t in_addr_t;

#define __sockaddr_common_size (sizeof (unsigned short int))

值得注意的是:

這些專用socket結構體裡的埠號都是用網路位元組序表示的。

所有專用socket位址(以及sockaddr_storage)型別的變數都需要在實際使用時轉化為通用socket位址型別sockaddr(直接強制轉換),因為所有socket程式設計api用的位址引數的型別都是sockaddr。

網路程式設計 socket基本概念

什麼是socket?socket是連線應用程式和網路驅動程式的橋梁,socket在應用程式中建立,通過繫結操作和驅動程式建立聯絡。什麼是ip位址?在網路上,主機與主機間的通訊,首先需要知道對通訊方主機的名稱。在internet上用ip位址來標記網路裝置。廣義上的主機可以是工作在網路上的工作台 伺服器...

socket網路程式設計的相關函式

1.wsastartup函式 用於初始化winsock 宣告 intwsastarup word wversionrequested,lpwsadata lpwsadata 引數 wversionrequested 要求使用winsock的最低版本號 lpwsadata winsock的詳細資料 返...

網路通訊 socket程式設計相關

衝擊年薪50w,助你高階python工程師 一 nonblock socket傳送資料返回 1,errno是etimedout 現象 通過poll返加該套節字可讀,但讀取時,返回 1,errno是etimedout。分析 1 該套節字主要用來傳送,該節點是千兆網絡卡,傳送的流量已近上限。2 該節點的...