首页主机资讯CentOS C++配置中的网络设置指南

CentOS C++配置中的网络设置指南

时间2025-10-13 09:28:04发布访客分类主机资讯浏览1369
导读:CentOS C++配置中的网络设置指南 一、系统级网络配置(基础准备) 在进行C++网络编程前,需先配置CentOS系统的网络环境,确保系统能正常联网。主要包括静态IP设置、DNS配置和网络服务重启。 1. 静态IP配置(永久生效) 静态...

CentOS C++配置中的网络设置指南

一、系统级网络配置(基础准备)

在进行C++网络编程前,需先配置CentOS系统的网络环境,确保系统能正常联网。主要包括静态IP设置DNS配置网络服务重启

1. 静态IP配置(永久生效)

静态IP需修改网络接口配置文件,不同CentOS版本的路径略有差异:

  • CentOS 7及之前:配置文件位于/etc/sysconfig/network-scripts/ifcfg-< 接口名> (如ifcfg-eth0ifcfg-ens33)。
  • CentOS 8及之后:可使用nmcli命令行工具或编辑/etc/systemd/network/10-< 接口名> .network文件。

以CentOS 7为例,编辑ifcfg-ens33文件:

sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33

修改以下参数(根据实际网络环境调整):

BOOTPROTO=static       # 改为静态IP
ONBOOT=yes             # 开机自启
IPADDR=192.168.1.100   # 静态IP地址
NETMASK=255.255.255.0  # 子网掩码(等价于PREFIX=24)
GATEWAY=192.168.1.1    # 网关地址
DNS1=8.8.8.8           # DNS服务器1
DNS2=8.8.4.4           # DNS服务器2

保存后重启网络服务:

sudo systemctl restart network

2. 临时IP配置(仅当前有效)

若需临时修改IP,可使用以下命令:

  • CentOS 8及之后(推荐):
    sudo ip addr add 192.168.1.100/24 dev ens33  # 添加IP
    sudo ip link set ens33 up                    # 激活接口
    
  • CentOS 7及之前
    sudo ifconfig ens33 192.168.1.100 netmask 255.255.255.0 up
    

3. DNS配置

编辑/etc/resolv.conf文件,添加DNS服务器:

sudo vi /etc/resolv.conf

添加以下内容:

nameserver 8.8.8.8
nameserver 8.8.4.4

保存后生效(无需重启服务)。

二、C++网络编程配置

系统级网络配置完成后,需在C++项目中配置网络编程环境,主要包括安装依赖库编写网络程序编译运行

1. 安装必要工具和库

C++网络编程需安装编译工具(gcc-c++make)和网络库(如libuvopenssl,根据项目需求选择):

# 安装基础编译工具
sudo yum install gcc gcc-c++ make kernel-devel

# 安装网络编程依赖库(以uWebSockets为例)
sudo yum install libuv-devel openssl-devel

2. 编写C++网络程序

TCP服务器TCP客户端为例,演示基本网络编程:

TCP服务器示例(server.cpp
#include <
    iostream>
    
#include <
    cstring>
    
#include <
    sys/socket.h>
    
#include <
    netinet/in.h>
    
#include <
    unistd.h>


int main() {
    
    int server_fd, new_socket;
    
    struct sockaddr_in address;
    
    int opt = 1;
    
    int addrlen = sizeof(address);

    char buffer[1024] = {
0}
    ;
    

    // 创建socket(AF_INET: IPv4;
 SOCK_STREAM: TCP)
    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
    
        perror("socket创建失败");
    
        exit(EXIT_FAILURE);

    }
    

    // 设置socket选项(允许地址复用)
    if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &
opt, sizeof(opt))) {
    
        perror("setsockopt失败");
    
        exit(EXIT_FAILURE);

    }
    

    // 配置地址和端口
    address.sin_family = AF_INET;
    
    address.sin_addr.s_addr = INADDR_ANY;
      // 监听所有网卡
    address.sin_port = htons(8080);
            // 端口号(需与系统配置一致)

    // 绑定socket到地址
    if (bind(server_fd, (struct sockaddr *)&
    address, sizeof(address)) <
 0) {
    
        perror("bind失败");
    
        exit(EXIT_FAILURE);

    }
    

    // 监听连接(最多3个排队)
    if (listen(server_fd, 3) <
 0) {
    
        perror("listen失败");
    
        exit(EXIT_FAILURE);

    }
    

    std::cout <
    <
     "服务器启动,等待连接..." <
    <
     std::endl;
    

    // 接受客户端连接
    if ((new_socket = accept(server_fd, (struct sockaddr *)&
    address, (socklen_t*)&
    addrlen)) <
 0) {
    
        perror("accept失败");
    
        exit(EXIT_FAILURE);

    }
    

    // 读取客户端数据
    read(new_socket, buffer, 1024);
    
    std::cout <
    <
     "收到客户端消息: " <
    <
     buffer <
    <
     std::endl;
    

    // 发送响应
    const char *response = "Hello from server";
    
    send(new_socket, response, strlen(response), 0);
    
    std::cout <
    <
     "响应已发送" <
    <
     std::endl;
    

    // 关闭socket
    close(new_socket);
    
    close(server_fd);
    
    return 0;

}
    
TCP客户端示例(client.cpp
#include <
    iostream>
    
#include <
    sys/socket.h>
    
#include <
    arpa/inet.h>
    
#include <
    unistd.h>
    
#include <
    string.h>


int main() {
    
    int sock = 0;
    
    struct sockaddr_in serv_addr;
    
    char *message = "GET / HTTP/1.1\r\n\r\n";

    char buffer[1024] = {
0}
    ;
    

    // 创建socket
    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) <
 0) {
    
        std::cout <
    <
     "Socket创建失败" <
    <
     std::endl;
    
        return 1;

    }
    

    // 配置服务器地址
    serv_addr.sin_family = AF_INET;
    
    serv_addr.sin_port = htons(8080);
      // 与服务器端口一致

    // 将IP地址从文本转换为二进制形式
    if (inet_pton(AF_INET, "127.0.0.1", &
    serv_addr.sin_addr) <
= 0) {
    
        std::cout <
    <
     "无效的IP地址" <
    <
     std::endl;
    
        return 1;

    }
    

    // 连接服务器
    if (connect(sock, (struct sockaddr *)&
    serv_addr, sizeof(serv_addr)) <
 0) {
    
        std::cout <
    <
     "连接失败" <
    <
     std::endl;
    
        return 1;

    }
    

    // 发送数据
    send(sock, message, strlen(message), 0);
    
    std::cout <
    <
     "数据已发送" <
    <
     std::endl;
    

    // 接收响应
    read(sock, buffer, 1024);
    
    std::cout <
    <
     "服务器响应: " <
    <
     buffer <
    <
     std::endl;
    

    // 关闭socket
    close(sock);
    
    return 0;

}
    

3. 编译和运行程序

使用g++编译C++程序(需链接网络库,如-lpthread用于多线程):

# 编译服务器
g++ server.cpp -o server

# 编译客户端
g++ client.cpp -o client

运行程序(先启动服务器,再启动客户端):

# 终端1:启动服务器
./server

# 终端2:启动客户端
./client

三、常见问题排查

  1. 无法联网:检查IP地址、子网掩码、网关是否正确,使用ip addr查看接口状态,ping测试网络连通性。
  2. 端口冲突:若端口已被占用,修改服务器代码中的端口号(如8080改为8081)。
  3. 权限问题:绑定低端口(< 1024)需用root权限运行程序(sudo ./server)。
  4. 防火墙拦截:放行端口(如8080):
    sudo firewall-cmd --permanent --add-port=8080/tcp
    sudo firewall-cmd --reload
    

通过以上步骤,可完成CentOS系统中C++网络配置,实现基本的网络通信功能。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: CentOS C++配置中的网络设置指南
本文地址: https://pptw.com/jishu/724421.html
如何在CentOS中配置C++依赖项 C++开发在CentOS的配置指南

游客 回复需填写必要信息