当前位置: 首页 > article >正文

#include <netinet/in.h>

#include <netinet/in.h>,这是一个标准的网络编程头文件,用于定义 IP 地址、协议以及与网络接口相关的数据结构和常量。它主要用于在基于 IPv4 和 IPv6 的网络编程中。

#include <netinet/in.h> 的作用

<netinet/in.h> 头文件包含了处理网络地址的定义和一些网络协议的相关常量,用于支持基于 IP(特别是 IPv4 和 IPv6)的网络编程。它提供了一些关键的数据结构和宏,如:

常见的结构和宏:

struct sockaddr_in:用于表示 IPv4 地址的结构体,常用于定义套接字绑定或连接的地址。

struct sockaddr_in {
    sa_family_t    sin_family;  // 地址族 (AF_INET)
    in_port_t      sin_port;    // 端口号 (使用 htons() 来转换字节序)
    struct in_addr sin_addr;    // IP 地址
};
  • struct sockaddr_in6:用于表示 IPv6 地址的结构体。

  • struct in_addr:用于存储 IPv4 地址。

struct in_addr {
    uint32_t s_addr;  // 32 位 IPv4 地址 (使用 inet_addr() 等函数设置)
};
  • INADDR_ANY:表示通配的 IPv4 地址,通常用于服务器套接字,表示绑定到所有可用的网络接口。

  • htons()ntohs():用于在主机字节序和网络字节序之间转换 16 位短整数(通常用于端口号)。

  • inet_addr()inet_ntoa():用于在点分十进制的 IPv4 地址和二进制格式之间进行转换。

示例代码:

以下是一个简单的示例,展示如何使用 netinet/in.h 中的结构体和函数:

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

int main() {
    // 创建一个套接字
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) {
        std::cerr << "Failed to create socket\n";
        return -1;
    }

    // 定义服务器的地址结构体
    struct sockaddr_in server_addr;
    server_addr.sin_family = AF_INET;              // 使用 IPv4
    server_addr.sin_port = htons(8080);            // 指定端口号,使用 htons() 转换
    server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");  // 指定服务器 IP 地址

    // 尝试连接服务器
    if (connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
        std::cerr << "Connection failed\n";
        close(sockfd);
        return -1;
    }

    // 发送数据
    const char* message = "Hello, Server!";
    send(sockfd, message, strlen(message), 0);

    // 关闭套接字
    close(sockfd);
    return 0;
}

在这个示例中,<netinet/in.h> 中的 sockaddr_ininet_addr() 被用来设置服务器的 IP 地址和端口号。


http://www.kler.cn/a/300484.html

相关文章:

  • 暴雨液冷服务器硬刚液冷放量元年
  • 探索Python中的斐波那契数列:实现与应用
  • 大规模K8S集群的网络与存储优化:5000+节点规模| 第2集
  • 安装驱动是有什么作用,它是怎么工作的
  • 408算法题leetcode--第一天
  • SprinBoot+Vue高校网上缴费综合务系统的设计与实现
  • 免费云服务器申请教程
  • java反射(reflection)的基本理解和使用
  • MongoDB Limit 与 Skip 方法
  • Java中SringBoot服务连接多个MySQL数据源案例实战
  • 微软面向所有用户推出 Xbox Game Pass Standard
  • Python基础语法(1)下
  • 速盾:未备案网站如何加cdn?
  • 在 `el-upload` 上传图片前裁剪:让你的应用更“裁”心,更“剪”美!
  • linux操作系统日志小知识
  • 【路径规划】 使用计算机视觉和机器人操纵器绘制肖像
  • 828华为云征文 | Flexus X实例CPU、内存及磁盘性能实测与分析
  • 文件IO编程
  • python小脚本,实时监测服务器是否宕机状态,并发送到指定群组
  • 单向链表之创建,插入,输出(上)