1、struct sockaddr:在linux环境下,该结构体在/usr/include/linux/socket.h中定义,具体如下:
struct sockaddr {
unsigned short sa_family; /* 地址族, AF_xxx */
char sa_data[14]; /* 14字节的协议地址*/
};
2、struct sockaddr_in:在linux环境下,结构体struct sockaddr_in在/usr/include/netinet/in.h中定义,具
体如下:
struct sockaddr_in {
short int sin_family; /* 地址族 */
unsigned short int sin_port; /* 端口号 */
struct in_addr sin_addr; /* Internet地址 */
unsigned char sin_zero[8]; /* 与struct sockaddr一样的长度 */
};
struct in_addr其实就是32位IP地址
struct in_addr {
unsigned long s_addr;
};
BSD网络软件中包含了两个函数,用来在二进制地址格式和点分十进制字符串格式之间相互转换,但是这两个函数仅仅支持IPv4。
in_addr_t inet_addr(const char *cp);
char *inet_ntoa(struct in_addr in);
功能相似的两个函数同时支持IPv4和IPv6
const char *inet_ntop(int domain, const void *addr, char *str, socklen_t size);
int inet_pton(int domain, const char *str, void *addr);
阅读(721) | 评论(0) | 转发(0) |