socket結構和幾個IP位址轉換函式

2021-06-17 15:58:35 字數 1263 閱讀 2663

通用的結構體:

struct sockaddr ;

程式設計時常用的

struct sockaddr_in ;

其中

struct in_addr ;

typedef struct in_addr s_un_b;

struct s_un_w;

unsigned long s_addr;

}s_un;

}in_addr;

某些函式呼叫時的引數必須是指向通用結構體的指標,到時乙個強制轉換即可

in_addr_t inet_addr(const char *cp);

in_addr_t inet_network(const char *cp);

int inet_aton(const char *cp, struct in_addr *inp);

char *inet_ntoa(struct in_addr in);

前兩個函式分別將字串形式的ip轉換為網路位元組序和主機位元組序的ip,返回ip結構。

inet_aton將第乙個引數字串形式ip轉換成網路位元組序ip存入第二個引數 指向ip結構體的指標

inet_ntoa將ip結構體中ip轉換成點分式ip字串並返回。

struct sockaddr_in address;

address.sin_family = af_inet;

address.sin_addr.s_addr = inet_addr("127.0.0.1");

inet_aton("127.0.0.1",&address.sin_addr);

printf("ip is ntoa: %s/n",inet_ntoa(address.sin_addr));

兩個通過套接字描述符獲取套接字結構的函式

int getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

int getpeername(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

把第乙個引數檔案描述服對應的套接字結構存入第二個引數套接字結構指標所指向的套接字結構體中,第三個引數為指向所獲取的套接字結構大小整數的指標,該整數一般為16。

區別在於前者用於獲取本地套接字,後者用於遠端在客戶端呼叫前者,得到自己的,呼叫後者得伺服器的,在伺服器端情況正好相反

socket結構和幾個IP位址轉換函式

通用的結構體 struct sockaddr s un b struct s un w unsigned long s addr s un in addr 某些函式呼叫時的引數必須是指向通用結構體的指標,到時乙個強制轉換即可 in addr t inet addr const char cp in ...

socket結構和幾個IP位址轉換函式

通用的結構體 struct sockaddr s un b struct s un w unsigned long s addr s un in addr 某些函式呼叫時的引數必須是指向通用結構體的指標,到時乙個強制轉換即可 in addr t inet addr const char cp in ...

Socket位址結構

如bind函式的第二個引數型別就是通用套接字位址結構的指標,使用的時候一般需要把乙個ipv4 ipv6套接字位址結構強制轉換成乙個通用通用套接字位址結構再取位址 注意埠和位址都是使用網路位元組序,填寫時需要分別呼叫htons,htonl h host,s 16位short,l 32位long 將主機...