C++中TCP通信通过socket实现,服务器创建套接字、绑定端口、监听并接受连接,客户端连接后双方收发数据。1. 服务器流程:创建socket→bind→listen→accept→recv/send→close;2. 客户端流程:创建socket→connect→send/recv→close。代码示例展示了服务器监听8080端口,客户端发送"Hello from client",服务器接收并返回"Message received"。编译使用g++ server.cpp -o server和g++ client.cpp -o client,先运行服务器再启动客户端即可完成通信。

C++ 中的 socket 编程是实现网络通信的基础,尤其在 TCP 协议下,客户端与服务器之间的稳定连接可以用于传输大量可靠数据。本文将介绍如何使用 C++ 实现一个简单的 TCP 客户端与服务器通信程序,适用于 Linux 环境(如 Ubuntu、CentOS),基于 BSD socket 接口。
1. TCP 通信的基本流程
TCP 是面向连接的协议,通信前必须建立连接。服务器监听端口,客户端发起连接请求,成功后双方通过套接字进行数据读写。
服务器端流程:
- 创建 socket
- 绑定地址和端口(bind)
- 监听连接(listen)
- 接受客户端连接(accept)
- 接收和发送数据(recv / send)
- 关闭连接
客户端流程:
立即学习“C++免费学习笔记(深入)”;
- 创建 socket
- 连接服务器(connect)
- 发送和接收数据(send / recv)
- 关闭连接
2. 服务器端代码实现
以下是一个简单的 TCP 服务器示例,监听本地 8080 端口,接收客户端消息并返回响应。
#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 addrlen = sizeof(address);
char buffer[1024] = {0};
const char *response = "Message received";
// 创建 socket
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("socket failed");
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");
close(server_fd);
exit(EXIT_FAILURE);
}
// 监听
if (listen(server_fd, 3) < 0) {
perror("listen");
close(server_fd);
exit(EXIT_FAILURE);
}
std::cout << "Server listening on port 8080...\n";
// 接受连接
if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) {
perror("accept");
close(server_fd);
exit(EXIT_FAILURE);
}
// 读取客户端消息
read(new_socket, buffer, 1024);
std::cout << "Client: " << buffer << std::endl;
// 发送响应
send(new_socket, response, strlen(response), 0);
std::cout << "Response sent\n";
// 关闭连接
close(new_socket);
close(server_fd);
return 0;
}
登录后复制
3. 客户端代码实现
客户端连接到服务器,发送一条消息,并接收服务器的响应。
标签: linux centos 端口 ubuntu ai c++ ios stream
还木有评论哦,快来抢沙发吧~