加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 教程 > 正文

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编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读