目錄
4. 位元組排序函式
5. 位址轉換函式
在同一臺主機或裝置上,可能有多個程序同時在使用tcp或udp協議,埠號的作用就是區分這些不同的程序,即每個程序使用各自不同的埠號。
對於tcp協議和udp協議,埠號都是用unsigned short型別表示,即埠號的範圍為0-65535,這65536個埠號被分為3段:
well-known埠在unix系統中稱為保留埠,使用保留埠的伺服器程式,必須以root使用者啟動執行。
tcp套接字對是定義tcp連線兩個端點的四元組,包括:本地ip位址、本地埠號、對端ip位址、對端埠號,每個端點的ip位址和埠號通常稱為乙個套接字。
tcp套接字對可用於唯一標識乙個網路中的tcp連線。
大多數套接字api都需要乙個指向套接字位址結構的指標作為函式引數,每個協議族都定義它自己的套接字位址結構,這些結構的名字均以sockaddr_開頭,並以對應每個協議族的唯一字尾結尾。
ipv4套接字位址結構通常也稱為「網際套接字位址結構」,它以sockaddr_in
命名,定義在標頭檔案中。
#include struct in_addr
;struct sockaddr_in
;
通用套接字位址結構struct sockaddr
定義在
標頭檔案中。
#include struct sockaddr
;
bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
#include /* 主機位元組序——>網路位元組序 */
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
/* 網路位元組序——>主機位元組序 */
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
上面4個位元組排序函式只適用於整數型別,因此在套接字程式設計中:
位址轉換函式用於在ip位址的字串格式和網路位元組序格式之間進行轉換。
#include #include #include /*
* 字串——>網路位元組序;
* 成功返回網路位元組序ipv4位址,失敗返回inaddr_none;
*/in_addr_t inet_addr(const char *str);
/* * 字串——>網路位元組序,並通過addr指標儲存;
* 若字串有效則成功返回1,否則失敗返回0.
*/int inet_aton(const char *str, struct in_addr *addr);
/* * 網路位元組序——>字串;
* 返回字串格式的ipv4位址.
*/char *inet_ntoa(struct in_addr addr);
上面三個函式有兩點需要注意: 套接字程式設計簡介
這是unp的第三章,主要講了一些基礎的struct以及一些基礎的api,這些struct在後面會一直使用的。ipv4與ipv6的結構儘管不一樣,但類似,連起名都只是ipv6的比ipv4的多來個6,如 struct in6 addr與struct in addr,struct sockaddr in6...
套接字程式設計簡介
以sockaddr in命名,定義在中。typedef uint32 t in addr t struct in addr struct sockaddr in 當作為乙個引數傳遞進任何套接字函式時,套接字位址結構總是以引用形式 也就是指向該結構的指標 傳遞。然而以這樣的指標為引數之一的任何套接字函...
套接字程式設計簡介
struct in addr posix規範只需要這個結構中的3個字段 sin family,sin addr,sin port struct sockaddr in 從核心到程序 為了使套接字函式能夠處理來自所支援的任何協議族的套接字位址結構,在標頭檔案中定義了乙個通用的套接字位址結構,並將指向某...