Linux C网络常用结构体及函数概括
发布时间:2021-11-24 18:11:07 所属栏目:教程 来源:互联网
导读:一。结构体 1. struct sockaddr { unsigned short sa_family; /* address family, AF_xxx */ char sa_data[14]; /* 14 bytes of protocol address */ }; 共2+14=16字节 2. #include netinet/in.h struct sockaddr_in { short sin_family; // e.g. AF_INET 协
一。结构体 1. struct sockaddr { unsigned short sa_family; /* address family, AF_xxx */ char sa_data[14]; /* 14 bytes of protocol address */ }; 共2+14=16字节 2. #include <netinet/in.h> struct sockaddr_in { short sin_family; // e.g. AF_INET 协议族 unsigned short sin_port; // e.g. htons(3490) 端口号(网络字节序) struct in_addr sin_addr; // IP地址 unsigned char sin_zero[8]; // 为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节 }; 共2+2+4+8=16字节 (1)Internet上数据以高位字节优先顺序在网络上传输 (2)sin_zero应该用bzero()或memset()函数将其置为零 (3)sin_family通常被赋AF_INET;sin_port和 sin_addr应该转换成为网络字节优先顺序;而sin_addr则不需要转换。 sockaddr_in和sockaddr是并列的结构,指向sockaddr_in的结构体的指针也可以指向 sockaddr的结构体,并代替它. 3. struct in_addr { unsigned long s_addr; // load with inet_aton() }; 共4字节 4. struct hostent { char * h_name; //地址的正式名称 char ** h_aliases; // 空字节-地址的预备名称的指针 int h_addrtype; //地址类型; 通常是AF_INET int h_length; // 地址的比特长度 char ** h_addr_list; // 零字节-主机网络地址指针。网络字节顺序 }; #define h_addr h_addr_list[0] //h_addr_list中的第一地址 二.转换函数 1. #include <arpa/inet.h> uint32_t htonl(uint32_t hostlong); uint16_t htons(uint16_t hostshort); uint32_t ntohl(uint32_t netlong); uint16_t ntohs(uint16_t netshort); 2.inet_ntoa #include <arpa/inet.h> char *inet_ntoa (struct in_addr) 将网络主机地址转为网络标准点分格式的字符串。 3.inet_addr #include <arpa/inet.h> in_addr_t inet_addr(const char *cp); 将字符串cp(标准的IPV4点分十进制格式地址)转为一个合适的可作为网络地址的整数。 其中<netinet/in.h> typedef uint32_t in_addr_t; 而<stdint.h>中 :typedef unsigned int uint32_t; 所以:in_addr_t ->unsigned int 4. gethostbyname gethostbyaddr #include <netdb.h> struct hostent * gethostbyaddr(const void *addr, socklen_t len, int type); struct hostent * gethostbyname(const char *name); 5. socket #Include <sys/socket.h> int socket(int domain, int type, int protocol); connect int connect(int socket, const struct sockaddr *address, socklen_t address_len); bind int bind(int socket, const struct sockaddr *address, socklen_t address_len); listen int listen(int socket, int backlog); ![]() (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |