发布于2026-07-12 阅读(0)
扫一扫,手机访问
在Ubuntu下进行C++网络编程,其实并没有想象中那么复杂。核心思路就是走完“安装环境→写代码→编译→运行”这几步,当然,如果想测试,还得顺手写个客户端。下面就把完整的操作流程拆开来说。
打开终端,先跑一遍更新,然后安装编译器和OpenSSL库——后者主要给加密通信用的,不过多数网络程序都会依赖它。
sudo apt-get update
sudo apt-get install build-essential libssl-dev
装完之后,GCC、G++就都有了,OpenSSL的库文件也一并到位。
用你习惯的编辑器(vim、nano、VSCode都行)创建一个文件,比如 server.cpp。下面是一个最基础的TCP服务器示例,它做的事情很纯粹:创建一个socket,绑定端口,监听,然后接收一个客户端的连接,读数据,再回一句“Hello from server”。
#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};
// 创建socket文件描述符
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("socket failed");
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到8080端口
if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {
perror("bind failed");
exit(EXIT_FAILURE);
}
// 开始监听,最大连接数设为3
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" << std::endl;
// 关闭连接和socket
close(new_socket);
close(server_fd);
return 0;
}
把这段代码保存为 server.cpp。
终端里执行下面的命令,生成可执行文件 server:
g++ server.cpp -o server
如果没有报错,当前目录下就会出现一个叫 server 的文件。
直接启动它:
./server
程序就开始监听本机的8080端口,等着客户端来敲门。
要是想验证服务器是不是真的能工作,可以写一个简单的TCP客户端。同样新建一个文件 client.cpp,内容如下:
#include
#include
#include
#include
#include
int main() {
int sock = 0;
struct sockaddr_in serv_addr;
char buffer[1024] = {0};
// 创建socket
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);
// 将IP地址从文本转为二进制
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" << std::endl;
// 读取服务器返回的数据
read(sock, buffer, 1024);
std::cout << "Message from server: " << buffer << std::endl;
// 关闭socket
close(sock);
return 0;
}
保存后编译并运行客户端:
g++ client.cpp -o client
./client
终端会依次显示“Hello message sent”和服务器回复的“Message from server: Hello from server”。
以上就是Ubuntu下C++网络编程最基础的一套流程。掌握了这个骨架,你就可以根据自己的需求往上加逻辑——比如支持多客户端、加密传输、自定义协议等等。说白了,网络编程的核心就是socket那几个函数,剩下的都是围绕它做文章。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8