登录
2022-12-13 02:37:15

sockaddr 来自免费编辑 添加义项名

B 添加360百科义项
?
义项指多义词的不同概念,如李娜的义项:网球运动员、歌手等;非诚勿扰的义项:冯小刚执导电影、江苏卫视交友节目等依众查看详细规范>>
布景府进致额弦属类别 :
其他
其他
编辑分

一,用于存储参与(IP)Windows/linux套接字通信的计算机上的一个internet协议(IP)地址。为了统一地址结构的表示方法 ,统一接口函数,使得不同的地址结构可以被bind()、connect()、recvfrom()、sendto()等函数调用。但一般的编程中并不直接对此数据结构进行操作,而使用另一个与之等价的数据结构sockaddr_in。这是由于Microsoft TCP/IP套接字开发人员的工具箱仅支持internet地址字段,而实际填充字段的每一部分则遵循sockaddr_in数据结构,两者大小都是16字节,所以二者之间可以进行切换。

基本信息

  • 外文名称

    sockaddr

  • 性质

    通用地址结构

  • 定义

    struct sockaddr {

  • 说明

    sa_data : 是14字节的协议地址

折叠 编辑本段 sockaddr

其定义如下:

struct sockaddr {

unsigned short sa_family; /* address family, AF_xxx */

char sa_data[14]; /* 14 bytes of protocol address 让板损让按在货响*/

};

说明:

sa_family :是2字节的地址家族,一般都是"AF_xxx"的形式,它的值包括三种:AF_INETAF_INET6AF_UNSPEC

如果指定A错选就她做转业F_INET,那么函数就不能返回任何IPV6相关的地址信息;如果仅指定了AF_INET6,则就不能返回任何IPV4地址信息。

AF_UNSPEC则意味着函数返回的是适用于指营更组厚就际定主机名和服务名且适合任何协议族的地址。如果某个主机既有AAAA记录(IPV6)地址,同时又有A记录(IPV4)地址,那么AAAA记录将作为sockaddr_i散附推n6结构返回,而A记录则作为sockaddr_in结构返回

通常用的都是AF_INET。

折叠 编辑济亚爱本段 sockaddr_in

其定义如下:

struct sockaddr_in {

short int sin_family; /* A银配求营永容钟官要血ddress family */

unsigned short int sin_port; /* Port number */

struct in_a宣应态写指甲架服ddr sin_addr; /* Internet address */

unsigned char sin远环示叫识法都持_zero[8]; /* Same size as struct sockaddr */

};

sin_family:指代协议族,在socket编程中只能是AF_INET

sin_port:存储端口号(使用网络字节顺序)

sin_addr:存储IP地址,使用in胡跳言_addr这个数据结构

sin_zero:是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。

而其中in_addr结构的既果角呀散定义如下:

type杆围刻入脱火def struct in_今获器addr {

union {

struct{ unsigned char s_b1,s_b2准情国表, s_b3,s_b4;} S_u歌资船系侵式仅年n_b;

struct{ unsigned short s_w1, s_w2;} S_un_w;

unsigned long S_addr;

} S_un;

} IN_ADDR;

阐述下in_ad环油严dr的含义,很显然它是一个存储ip地址的共用体有三种表达方式:

第一种用四个字节来表示IP地址的四个数字;

第二种用两个双字节来表示IP地址;

第三种用一个长整型来表示叫画续死转致一正指IP地址。

给in_addr赋值的一种最简单方法是使用inet_addr函数,它可以把一个代表IP地址的字符串赋值转换为in_addr类型,如addrto.sin_addr.s_addr=inet_addr("192.168.0.2");

其反函数是inet_ntoa,可以把一个in_addr类型转配划最视拿银味调见周聚换为一个字符串。

阅读全文