sockaddr_in

        在网络编程中,sockaddr_in 结构体是用于表示 IPv4 地址的套接字地址结构。它定义在 <netinet/in.h> 头文件中,是 sockaddr 结构体的一个特化版本,专门用于处理 IPv4 地址。

下面是 sockaddr_in 结构体的典型定义:

struct sockaddr_in {
    sa_family_t sin_family;   // 地址族,对于 IPv4 应为 AF_INET
    in_port_t sin_port;     // 端口号
    struct in_addr sin_addr;  // IPv4 地址
    char sin_zero[8];        // 填充至 sizeof(struct sockaddr)
};
  • sin_family:指定地址族,对于 IPv4 地址,这个字段通常设置为 AF_INET

  • sin_port:指定端口号,用于标识特定的服务或应用程序。端口号可以是网络字节序(big-endian)或主机字节序,通常使用 htons() 函数从主机字节序转换为网络字节序。

  • sin_addr:是一个 in_addr 结构体,包含实际的 IPv4 地址。in_addr 结构体通常包含一个 s_addr 字段,这是一个 32 位的无符号整数,用于存储 IPv4 地址。

  • sin_zero:一个 8 字节的数组,用于将 sockaddr_in 结构体填充至 sockaddr 结构体的大小,以确保兼容性。

示例:初始化 sockaddr_in 结构体

以下是一个初始化 sockaddr_in 结构体并将其用于绑定套接字的示例:

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main() {
    int sockfd;
    struct sockaddr_in local;

    // 创建套接字
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) {
        perror("socket creation failed");
        return 1;
    }

    // 初始化 sockaddr_in 结构体
    local.sin_family = AF_INET;       // 地址族为 IPv4
    local.sin_port = htons(8080);    // 端口号为 8080,使用 htons 转换为网络字节序
    local.sin_addr.s_addr = INADDR_ANY; // 任意本地地址

    // 绑定套接字到本地地址
    if (bind(sockfd, (struct sockaddr *)&local, sizeof(local)) < 0) {
        perror("bind failed");
        close(sockfd);
        return 1;
    }

    // 监听连接请求
    if (listen(sockfd, 5) < 0) {
        perror("listen failed");
        close(sockfd);
        return 1;
    }

    // 接受连接等后续操作...

    // 关闭套接字
    close(sockfd);

    return 0;
}

        在这个示例中,我们创建了一个 TCP 套接字,并使用 sockaddr_in 结构体指定了本地地址和端口。然后,我们使用 bind() 函数将套接字绑定到本地地址和端口。INADDR_ANY 表示套接字可以接收来自任何本地地址的连接请求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pipip.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值