套接字是乙個抽象層,應用程式通過套接字傳送或接受資料,其方式類似開啟檔案控制代碼寫入或讀取。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_in
和sockaddr_in6
),但是在為api提供引數時,需要強制轉換成sockaddr
,函式會檢查sa_family
項以獲知真實型別,並強制轉換回合適型別。
struct sockaddr_in
struct sockaddr_in6
書上沒講
前面提到sin_port
和sin_addr
需要表示為網路二進位制,sin_port
由htons()
負責,sin_addr
由inet_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出來的所有物...