在建立socket通訊的過程中位址起著很關鍵的作用,在設計tcp/ip網路程式時,必須對 socket 的位址結構有清晰的認識。 tcp/ip 的位址資料結構。
struct sockaddr {
u_short safamily;/*位址族,af_****/
char sa_data[14];/*14位元組的特定協議位址*/
struct in_addr{
u_long s_addr;/*32位元的ip位址,網路位元組順序 */
struct sockaddr_in{
short sin_family; /*af_inet*/
u_short sin_short; /*16位元的埠號,網路位元組順序*/
struct in_addr sin_addr; /*32位元的ip位址,網路位元組順序*/
char sin_zero[8]; /*未用*/
網路位元組順序是tcp/ip中規定好的一種資料表示格式,它與具體的cpu型別、作業系統等無關,從而可以保證資料在不同主機之間傳輸時能夠被正確解釋。由主機位元組順序轉換為網路位元組順序的兩個函式如下:htons():將16位元的主機位元組順序資料轉換為網路位元組順序htonl():將32位元的主機位元組順序資料轉換為網路位元組順序與此相對應的將網路位元組順序轉換為主機位元組順序的函式為:
ntohs():將16位元的網路位元組順序資料轉換為主機位元組順序ntohl():將32位元的網路位元組順序資料轉換為主機位元組順序由於各種socket位址結構的長度相差很大,tcp/ip位址族的位址長度為8位元組,xns位址為14位元組,unix位址不定,最長可達110位元組,所以無法以一種統一的格式定義它們,需要在bind()呼叫中明確指定socket位址的長度。
當bind()引數無效或埠已被其他程式所用時,函式返回-1,表明本次socket命名失敗。
socket 的位址結構
在建立socket通訊的過程中位址起著很關鍵的作用,在設計tcp ip網路程式時,必須對 socket 的位址結構有清晰的認識。tcp ip 的位址資料結構。struct sockaddr struct in addr struct sockaddr in 網路位元組順序是tcp ip中規定好的一種...
socket 的位址結構
在建立socket通訊的過程中位址起著很關鍵的作用,在設計tcp ip網路程式時,必須對 socket 的位址結構有清晰的認識。tcp ip 的位址資料結構。struct sockaddr u short safamily 位址族,af char sa data 14 14位元組的特定協議位址 st...
Socket位址結構
如bind函式的第二個引數型別就是通用套接字位址結構的指標,使用的時候一般需要把乙個ipv4 ipv6套接字位址結構強制轉換成乙個通用通用套接字位址結構再取位址 注意埠和位址都是使用網路位元組序,填寫時需要分別呼叫htons,htonl h host,s 16位short,l 32位long 將主機...