C++ 原生 Socket 编程的 TCP 通信 demo
·
C++ 原生 Socket 编程的 TCP 通信 demo
服务器端 server.cpp
#include <iostream>
#include <cstring>
#include <unistd.h>
#include <arpa/inet.h>
int main() {
int server_fd, client_fd;
struct sockaddr_in server_addr, client_addr;
socklen_t client_len = sizeof(client_addr);
char buffer[1024] = {0};
// 1. 创建 socket
server_fd = socket(AF_INET, SOCK_STREAM, 0);
if (server_fd < 0) {
perror("socket creation failed");
return -1;
}
// 2. 绑定地址和端口
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY; // 监听所有网卡
server_addr.sin_port = htons(8888);
if (bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
perror("bind failed");
return -1;
}
// 3. 监听
if (listen(server_fd, 3) < 0) {
perror("listen failed");
return -1;
}
std::cout << "Server listening on port 8888..." << std::endl;
// 4. 接受客户端连接
client_fd = accept(server_fd, (struct sockaddr*)&client_addr, &client_len);
if (client_fd < 0) {
perror("accept failed");
return -1;
}
std::cout << "Client connected from " << inet_ntoa(client_addr.sin_addr) << std::endl;
// 5. 接收数据
int bytes_read = read(client_fd, buffer, sizeof(buffer) - 1);
if (bytes_read > 0) {
buffer[bytes_read] = '\0';
std::cout << "Received: " << buffer << std::endl;
}
// 6. 发送回复
const char* reply = "Server received your message";
send(client_fd, reply, strlen(reply), 0);
// 7. 关闭连接
close(client_fd);
close(server_fd);
return 0;
}
客户端 client.cpp
#include <iostream>
#include <cstring>
#include <unistd.h>
#include <arpa/inet.h>
int main() {
int sock;
struct sockaddr_in server_addr;
char buffer[1024] = {0};
// 1. 创建 socket
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
perror("socket creation failed");
return -1;
}
// 2. 配置服务器地址
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8888);
if (inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr) <= 0) {
perror("invalid address");
return -1;
}
// 3. 连接服务器
if (connect(sock, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
perror("connection failed");
return -1;
}
// 4. 发送消息
const char* message = "Hello from C++ client";
send(sock, message, strlen(message), 0);
std::cout << "Message sent: " << message << std::endl;
// 5. 接收回复
int bytes_read = read(sock, buffer, sizeof(buffer) - 1);
if (bytes_read > 0) {
buffer[bytes_read] = '\0';
std::cout << "Server reply: " << buffer << std::endl;
}
// 6. 关闭 socket
close(sock);
return 0;
}
编译运行:
# 编译
g++ server.cpp -o server
g++ client.cpp -o client
# 先启动服务器
./server
# 另开终端运行客户端
./client

改进方向

更多推荐

所有评论(0)