CentOS C++配置中的网络设置指南
导读: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-eth0
、ifcfg-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
)和网络库(如libuv
、openssl
,根据项目需求选择):
# 安装基础编译工具
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
三、常见问题排查
- 无法联网:检查IP地址、子网掩码、网关是否正确,使用
ip addr
查看接口状态,ping
测试网络连通性。 - 端口冲突:若端口已被占用,修改服务器代码中的端口号(如
8080
改为8081
)。 - 权限问题:绑定低端口(<
1024)需用
root
权限运行程序(sudo ./server
)。 - 防火墙拦截:放行端口(如
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