Chapter2 基本的TCP套接字

2021-10-24 16:44:25 字數 2807 閱讀 6206

套接字是乙個抽象層,應用程式通過套接字傳送或接受資料,其方式類似開啟檔案控制代碼寫入或讀取。tcp/ip中的套接字主要是流套接字和資料報套接字。流套接字基於端到端協議,提供可靠的服務;資料報套接字基於udp協議,提供盡力而為服務。

乙個程式可以對應多個套接字,同樣,乙個套接字可以對應多個程式。套接字通過internet位址、協議、埠號唯一標識。

客戶與伺服器建立鏈結

通訊在進行通訊之前,需要先建立套接字抽象層。

int

socket

(int domian,

int type,

int protocol)

通訊完成後,要關閉通訊,並釋放與套接字關聯的資源。

int

close

(int socket)

如果成功會返回0

00,否則返回−1-1

−1sockets api提供了一種泛型資料結構(sockaddr),以儲存網路位址和埠。ipv4和ipv6有其特化的資料結構(sockaddr_insockaddr_in6),但是在為api提供引數時,需要強制轉換成sockaddr,函式會檢查sa_family項以獲知真實型別,並強制轉換回合適型別。

struct sockaddr_in

struct sockaddr_in6

書上沒講

前面提到sin_portsin_addr需要表示為網路二進位制,sin_porthtons()負責,sin_addrinet_pton()負責。

int

inet_pton

(int addressfamily,

const

char

*src,

void

*dst)

;

相似的,從網路二進位製到可列印字元由inet_ntop()負責

const

char

*inet_ntop

(int addressfamily,

const

void

*src,

char

*dst, socklen_t dstbytes)

在伺服器的ip位址和埠處,客戶和伺服器進行接觸。對於客戶機而言,它需要將它的套接字,連線到伺服器的ip位址和埠處。

int

connect

(int socket,

const

struct sockaddr *foreignaddress,soklen_t addresslength)

對於伺服器而言,它需要將它的套接字繫結到它自己的ip位址和埠上。

int

bind

(int socket,

struct sockaddr *loackaddress,socklen_t addresslen)

乙個主機會有多個ip位址,如果伺服器希望接受傳送到該主機的所有位址上的資訊,它可以將loackaddress中的sin_addr項置為inaddr_any(或者sin6_addr置為inaddr6_any),但是要注意,inaddr_any是主機位元組序,需要專場網路位元組序(honl(inaddr_any)負責這個工作)。inaddr6_any不必。

int

listen

(int sockdt,

int queuelen)

listen函式負責將原套接字轉成偵聽狀態,queuelen為佇列長度

int

accept

(int socket,

struct sockaddr *clientaddress,socklen_t addresslen)

socket項為原套接字,alientaddress為客戶端的ip位址和埠號資訊,addresslen為前者的長度。

通過accept操作,伺服器可以知道客戶機的ip位址和埠號,並返回乙個新套接字,用於處理該鏈結。

一旦連線建立,客戶與伺服器之間的區別就會消失,可以通過各自的套接字使用send()recv()互相通訊。

ssize_t send

(int socket,

const

void

*msg,size_t msglength,

int flags)

ssize_t recv

(int socket,

void

*rcvbuffer,size_t bufferlength,

int flags)

《程式設計實踐》chapter2

a b c c符號與b相同 若a,b,一正一負,c a b int a b 1 若a,b,同號,c a b a b 17 10 1.7 17 10 7 取模運算 17 10 1.7 17 10 317 10 1.7 17 20 有乙個除數時 17 10 3 運算方法等於 17 10,但結果的符號與1...

資料探勘 Chapter 2

本章 資料有什麼型別的屬性或字段組成?每個屬性具有何種型別的資料值 屬性 屬性是乙個資料字段,表示資料物件的乙個特徵。機器學習文獻更傾向於使用術語 特徵 而統計學家更源於使用術語 變數 資料探勘與資料庫的專業人士一般使用術語 屬性 屬性的種類 資料的基本統計描述 資料視覺化 層次視覺化 視覺化複雜物...

Chapter 2 工廠設計模式

和單例設計模式一樣,工廠設計模式也是屬於建立型模式。其主要作用是抽象了物件被建立時的具體細節,對外暴露乙個建立的方法,省去使用者new乙個物件的操作。乍一看,工廠設計模式只是抽象了乙個new物件的操作。其實,實際專案中new乙個物件的邏輯比較複雜,如果這個邏輯以後被修改了,那麼之前new出來的所有物...