struct sockaddr_in{ sa_family_tsin_family; //地址族,常用AF_INET uint16_t sin_port; //16位TCP/UDP端口号 struct in_addr sin_addr; //32位IP地址 cha sin_zero[8] //不使用 }; struct in_addr{ in_addr_t s_addr; //32位IPV4地址 } struct sockaddr_in6 { sa_family_t sin6_family;...
bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)); 二、inet_addr、 inet_aton、inet_ntoa inet_addr: 将网络地址转为网络二进制数字,返回的IP地址是网络序的。函数原型: unsigned long in inet_addr(const char *cp) inet_aton:将网络地址转为网络二进制数字,与inet_addr的区别是,结...
struct sockaddr是通用的套接字地址,而struct sockaddr_in则是internet环境下套接字的地址形式,二者长度一样,都是16个字节。二者是并列结构,指向sockaddr_in结构的指针也可以指向sockaddr。一般情况下,需要把sockaddr_in结构强制转换成sockaddr结构再传入系统调用函数中。 下面是struct sockaddr_in中用到两个数据类型,具体...
一、结构体 struct sockaddr_in, struct sockaddr, struct in_addr struct sockaddr_in, struct sockaddr,struct in_addr,这是网络编程中常用的结构体,每次都记不住它们各自的成员是啥,需要临时查,为方便以后的查看,在这里总结下。 struct sockaddr { unsigned short sa_family; /* 地址族, AF_xxx */ char s...
简单来说就是调用linux系统的:getifaddrs 和 freeifaddrs,读取系统的网卡接口信息,然后拷贝到用户的缓冲...
换句话说,这时sockaddr可以当作sockaddr_in看 Sockfd是调用socket函数返回的socket描述符,my_addr是个指向包含有本机IP地址及端口号等信息的sockaddr类型的指 针;addrlen常被设置为sizeof(struct sockaddr)。 structsockaddr结构类型是用来保存socket信息的:
} IN_ADDR; sin_family指代协议族,在socket编程中只能是AF_INET sin_port存储端口号(使用网络字节顺序) sin_addr存储IP地址,使用in_addr这个数据结构 sin_zero是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。 s_addr按照网络字节顺序存储IP地址 ...
struct sockaddr_in6 *addr_in6 = (struct sockaddr_in6 *)addr; char ip[INET6_ADDRSTRLEN]; inet_ntop(AF_INET6, &(addr_in6->sin6_addr), ip, INET6_ADDRSTRLEN); printf("IP Address: %s\n", ip); printf("Port: %d\n", ntohs(addr_in6->sin6_port)); ...
struct sockaddr与struct sockaddr_in struct sockaddr { unsigned short sa_family; /* address family, AF_xxx */ char sa_data[14]; /* 14 bytes of protocol address */ };sa_family是地址家族,一般都是“AF_xxx”的形式。好像通常大多用的是...
在网络编程中经常用到struct sockaddr和struct sockaddr_in,这里简单介绍。 在linux环境下,结构体struct sockaddr在/usr/include/linux/socket.h中定义,具体如下: 1 2 3 4 typedefunsignedshortsa_family_t; structsockaddr { sa_family_t sa_family;/* address family, AF_xxx */ ...