CentOS C++配置中的网络设置指南
在进行C++网络编程前,需先配置CentOS系统的网络环境,确保系统能正常联网。主要包括静态IP设置、DNS配置和网络服务重启。
静态IP需修改网络接口配置文件,不同CentOS版本的路径略有差异:
/etc/sysconfig/network-scripts/ifcfg-<接口名>(如ifcfg-eth0、ifcfg-ens33)。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
若需临时修改IP,可使用以下命令:
sudo ip addr add 192.168.1.100/24 dev ens33 # 添加IP
sudo ip link set ens33 up # 激活接口
sudo ifconfig ens33 192.168.1.100 netmask 255.255.255.0 up
编辑/etc/resolv.conf文件,添加DNS服务器:
sudo vi /etc/resolv.conf
添加以下内容:
nameserver 8.8.8.8
nameserver 8.8.4.4
保存后生效(无需重启服务)。
系统级网络配置完成后,需在C++项目中配置网络编程环境,主要包括安装依赖库、编写网络程序和编译运行。
C++网络编程需安装编译工具(gcc-c++、make)和网络库(如libuv、openssl,根据项目需求选择):
# 安装基础编译工具
sudo yum install gcc gcc-c++ make kernel-devel
# 安装网络编程依赖库(以uWebSockets为例)
sudo yum install libuv-devel openssl-devel
以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;
}
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;
}
使用g++编译C++程序(需链接网络库,如-lpthread用于多线程):
# 编译服务器
g++ server.cpp -o server
# 编译客户端
g++ client.cpp -o client
运行程序(先启动服务器,再启动客户端):
# 终端1:启动服务器
./server
# 终端2:启动客户端
./client
ip addr查看接口状态,ping测试网络连通性。8080改为8081)。root权限运行程序(sudo ./server)。8080):sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
通过以上步骤,可完成CentOS系统中C++网络配置,实现基本的网络通信功能。