首页 / 操作系统 / Linux / Linux C网络常用结构体及函数汇总
一。结构体
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.gethostbynamegethostbyaddr #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);