
- Unix套接字教程
- Unix套接字 - 首頁
- Unix套接字 - 什麼是套接字?
- Unix套接字 - 網路地址
- Unix套接字 - 網路主機名
- Unix套接字 - 客戶端-伺服器模型
- Unix套接字 - 結構
- Unix套接字 - 埠和服務
- Unix套接字 - 網路位元組序
- Unix套接字 - IP地址函式
- Unix套接字 - 核心函式
- Unix套接字 - 輔助函式
- Unix套接字 - 伺服器示例
- Unix套接字 - 客戶端示例
- Unix套接字 - 總結
- Unix套接字有用資源
- Unix套接字 - 快速指南
- Unix套接字 - 有用資源
- Unix套接字 - 討論
Unix套接字 - 結構
Unix套接字程式設計中使用了各種結構來儲存有關地址、埠和其他資訊的資訊。大多數套接字函式都需要一個指向套接字地址結構的指標作為引數。本章中定義的結構與網際網路協議族相關。
sockaddr
第一個結構是sockaddr,它儲存套接字資訊:
struct sockaddr { unsigned short sa_family; char sa_data[14]; };
這是一個通用的套接字地址結構,它將被傳遞到大多數套接字函式呼叫中。下表提供了成員欄位的描述:
屬性 | 值 | 描述 |
---|---|---|
sa_family |
AF_INET AF_UNIX AF_NS AF_IMPLINK |
它表示一個地址族。在大多數基於網際網路的應用程式中,我們使用AF_INET。 |
sa_data | 協議特定的地址 | 14個位元組的協議特定地址的內容根據地址型別進行解釋。對於網際網路族,我們將使用埠號IP地址,它由下面定義的sockaddr_in結構表示。 |
sockaddr_in
第二個結構幫助你引用套接字的元素如下:
struct sockaddr_in { short int sin_family; unsigned short int sin_port; struct in_addr sin_addr; unsigned char sin_zero[8]; };
以下是成員欄位的描述:
屬性 | 值 | 描述 |
---|---|---|
sa_family |
AF_INET AF_UNIX AF_NS AF_IMPLINK |
它表示一個地址族。在大多數基於網際網路的應用程式中,我們使用AF_INET。 |
sin_port | 服務埠 | 一個以網路位元組序表示的16位埠號。 |
sin_addr | IP地址 | 一個以網路位元組序表示的32位IP地址。 |
sin_zero | 未使用 | 只需將此值設定為NULL,因為它沒有被使用。 |
in_addr
此結構僅在上述結構中用作結構欄位,並儲存32位netid/hostid。
struct in_addr { unsigned long s_addr; };
以下是成員欄位的描述:
屬性 | 值 | 描述 |
---|---|---|
s_addr | 服務埠 | 一個以網路位元組序表示的32位IP地址。 |
hostent
此結構用於儲存與主機相關的資訊。
struct hostent { char *h_name; char **h_aliases; int h_addrtype; int h_length; char **h_addr_list #define h_addr h_addr_list[0] };
以下是成員欄位的描述:
屬性 | 值 | 描述 |
---|---|---|
h_name | ti.com 等 | 它是主機的正式名稱。例如,tutorialspoint.com、google.com等。 |
h_aliases | TI | 它儲存主機名別名列表。 |
h_addrtype | AF_INET | 它包含地址族,對於基於網際網路的應用程式,它將始終為AF_INET。 |
h_length | 4 | 它儲存IP地址的長度,對於網際網路地址為4。 |
h_addr_list | in_addr | 對於網際網路地址,指標陣列h_addr_list[0]、h_addr_list[1]等等指向結構in_addr。 |
注意 - h_addr 定義為 h_addr_list[0] 以保持向後相容性。
servent
此特定結構用於儲存與服務和關聯埠相關的資訊。
struct servent { char *s_name; char **s_aliases; int s_port; char *s_proto; };
以下是成員欄位的描述:
屬性 | 值 | 描述 |
---|---|---|
s_name | http | 這是服務的正式名稱。例如,SMTP、FTP、POP3等。 |
s_aliases | 別名 | 它儲存服務別名列表。大多數情況下,這將設定為NULL。 |
s_port | 80 | 它將具有關聯的埠號。例如,對於HTTP,這將是80。 |
s_proto |
TCP UDP |
它設定為使用的協議。網際網路服務是使用TCP或UDP提供的。 |
關於套接字結構的提示
套接字地址結構是每個網路程式不可或缺的一部分。我們分配它們,填寫它們,並將指向它們的指標傳遞給各種套接字函式。有時我們將這些結構之一的指標傳遞給套接字函式,它會填寫內容。
我們總是透過引用傳遞這些結構(即,我們傳遞指向結構的指標,而不是結構本身),並且我們總是將結構的大小作為另一個引數傳遞。
當套接字函式填寫結構時,長度也透過引用傳遞,以便其值可以被函式更新。我們稱這些值為結果引數。
始終使用memset()或bzero()函式將結構變數設定為NULL(即'\0'),否則你的結構中可能會出現意外的垃圾值。
廣告