sockaddr与sockaddr_in结构体区别 不同 详解

                                             粉丝不过W

  struct sockaddr struct sockaddr_in 这两个结构体都是用来 处理网络通信的地址

/*
 *此数据结构用做bind、connect、recvfrom、sendto等函数的参数,指明地址信息
 *note:
 *  目标地址和端口信息在一起
 */
#include <sys/socket.h>

struct sockaddr
{
    //地址家族,一般“AF_xxx”的形式,通常使用AF_INET
    unsigned short sa_family;
    // 14字节协议地址,目标地址和端口信息
    char           sa_data[14];
}
#include <netinet/in.h>

struct  sockaddr_in 
{
    short int       sin_family;       //协议族
    unsigned short  int  sin_port;    //端口号(使用网络字节顺序)
    struct in_addr  sin_addr;         //IP地址        
    unsigned char   sin_zero[8];      //sockaddr与sockaddr_in 保持大小相同而保留的空字节
};

struct  in_addr 
{
    unsigned  long  s_addr;
};

typedef struct in_addr 
{
    union
    {
        struct
        {
            unsigned char s_b1,
                          s_b2,
                          s_b3,
                          s_b4;
        } S_un_b;

        struct 
        {
            unsigned short s_w1,
                           s_w2;
        } S_un_w;

        unsigned long S_addr;
    } S_un;
} IN_ADDR;

sockaddr_insockaddr并列的结构,指向sockaddr_in的结构体的指针,同样可以 指向sockraddr的结构体,并代替它

struct sockaddr_in mysock;

bind(sockfd,(struct sockaddr *)&mysock,sizeof(struct sockaddr); /* bind的时候进行转化 */

猜你喜欢

转载自blog.csdn.net/qq_44226094/article/details/105701710