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的時候進行轉化 */

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章