发布于2026-07-20 阅读(0)
扫一扫,手机访问
在 Linux 下用 C++ 做网络编程,最直接的方式就是套接字(Socket)API。下面这个例子,你一看就明白——一个简单的 TCP 服务器加客户端,代码量不大,但五脏俱全。
先看服务器端,它的核心流程是:创建套接字 → 绑定端口 → 开始监听 → 等待客户端连上来 → 收数据 → 回数据 → 关闭连接。每一步都对应一个系统调用,错误处理也一并写上了,方便你直接编译跑起来。
#include
#include
#include
#include
#include
int main() {
int server_fd, new_socket;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
char buffer[1024] = {0};
// 创建套接字文件描述符
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("socket failed");
exit(EXIT_FAILURE);
}
// 设置套接字选项
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);
if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {
perror("bind failed");
exit(EXIT_FAILURE);
}
// 监听连接
if (listen(server_fd, 3) < 0) {
perror("listen");
exit(EXIT_FAILURE);
}
// 接受连接
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 << "Message from client: " << buffer << std::endl;
// 向客户端发送数据
send(new_socket, "Hello from server", 18, 0);
std::cout << "Hello message sent\n";
// 关闭套接字
close(new_socket);
close(server_fd);
return 0;
}
再来看客户端,角色正好反过来:创建套接字 → 配置服务器地址 → 发起连接 → 发送数据 → 接收回复 → 关闭。这里面用到了 inet_pton 把 IP 地址字符串转成二进制格式,这是现代网络编程的标准做法。
#include
#include
#include
#include
#include
int main() {
int sock = 0;
struct sockaddr_in serv_addr;
char buffer[1024] = {0};
// 创建套接字文件描述符
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
std::cout << " Socket creation error ";
return -1;
}
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(8080);
// 将IPv4地址从文本转换为二进制形式
if(inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) {
std::cout << "Invalid address/ Address not supported ";
return -1;
}
// 连接到服务器
if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
std::cout << "Connection Failed ";
return -1;
}
// 向服务器发送数据
send(sock, "Hello from client", 18, 0);
std::cout << "Hello message sent\n";
// 读取服务器发送的数据
read(sock, buffer, 1024);
std::cout << "Message from server: " << buffer << std::endl;
// 关闭套接字
close(sock);
return 0;
}
怎么跑起来?很简单,先编译服务器端:
g++ server.cpp -o server
./server
服务器启动后会监听 8080 端口,等待连接。然后另开一个终端编译客户端:
g++ client.cpp -o client
./client
客户端连上后,你会看到客户端发来“Hello from client”,服务器回复“Hello from server”。一来一回,一个完整的 TCP 通信就完成了。
这个例子虽然基础,但覆盖了 socket 编程中最关键的几个步骤:创建、绑定、监听、接受、连接、收发。实际项目中,你很可能需要处理多线程、非阻塞 IO、更大的数据缓冲区等等——但万变不离其宗,核心骨架就是这些。拿这段代码做起点,改改端口、加工一下业务逻辑,就能快速搭建出自己的网络服务。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8