linux 网络编程【一】 socket地址

本文介绍了Linux环境下三种主要的Socket地址结构:通用的sockaddr、Internet专用的sockaddr_in及Unix域套接字sockaddr_un,并解释了不同地址结构之间的转换方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • linux socket中三种地址

  • sockaddr普通的socket地址
typedef unsigned short sa_family_t;
struct sockaddr {
        sa_family_t     sa_family;    /* address family, AF_xxx       */
        char            sa_data[14];    /* 14 bytes of protocol address */
}


  • sockaddr_in Internet的socket地址
/* Structure describing an Internet socket address. */
struct sockaddr_in
{
    __SOCKADDR_COMMON (sin_);
    in_port_t sin_port;                     /* Port number. */
    struct in_addr sin_addr;            /* Internet address. */

    /* Pad to size of `struct sockaddr'. */
    unsigned char sin_zero[sizeof (struct sockaddr) -
                           __SOCKADDR_COMMON_SIZE -
                           sizeof (in_port_t) -
                           sizeof (struct in_addr)];     
                           /* 字符数组sin_zero[8]的存在是为了保证结构体struct sockaddr_in的大小和结构体struct sockaddr的大小相等 */
};

struct in_addr {
unit32_t s_addr; /* Internet address */
};


  • sockaddr_un Unix系统的socket地址
struct sockaddr_un {

  sa_family_t sun_family; /*PF_UNIX或AF_UNIX */

  char sun_path[UNIX_PATH_MAX]; /* 路径名 */

  };


  • linux socket中的地址转换

在一般的x86架构的PC中采用的是小端模式存储数据,而对于socket中所需要的是大端模式因而需要进行相关的转换。一般的转换函数有
  • socket通用转换函数
ntohl将网络32位字节数据转换为主机数据
ntohs将网络16位字节数据转换为主机数据
htonl将主机32位字节数据转换为网络数据
htons将网络16位字节数据转换为网络数据
  • inet转换函数
inet_ntoa将网络字节的ip地址转换为十进制点分地址
inet_aton将点分十进制地址转换为网络字节的ip地址
inet_network将点分十进制转换为主机字节的32位数据

  • 总结

一般网络编程填值的时候使用sockaddr_in结构,而作为函数的参数传入的时候转换成sockaddr结构,都是16个字符长。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值