C++客户端和服务端通信的示例代码

零妖贰捌 分享 285

以下是一个基本的C++客户端和服务端通信的示例代码。

服务端代码:

#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
int main()
{
// 创建socket
int socket_fd = socket(AF_INET, SOCK_STREAM, 0);
if (socket_fd == -1) {
std::cerr << "创建socket失败\n";
return 1;
}
// 建立sockaddr_in结构体
sockaddr_in addr;
std::memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(12345);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
// 绑定socket和sockaddr_in结构体
if (bind(socket_fd, (struct sockaddr *) &addr, sizeof(addr)) == -1) {
std::cerr << "绑定socket和地址失败\n";
return 2;
}
// 监听socket
if (listen(socket_fd, 5) == -1) {
std::cerr << "监听socket失败\n";
return 3;
}
std::cout << "服务器已启动,等待客户端连接...\n";
// 接受客户端连接
sockaddr_in client_addr;
socklen_t client_addrlen = sizeof(client_addr);
int client_fd = accept(socket_fd, (struct sockaddr *)&client_addr, &client_addrlen);
if (client_fd == -1) {
std::cerr << "接受客户端连接失败\n";
return 4;
}
std::cout << "客户端已连接\n";
// 接收客户端发送的数据
char buf[1024];
int recv_len = recv(client_fd, buf, sizeof(buf), 0);
if (recv_len == -1) {
std::cerr << "接收客户端数据失败\n";
return 5;
}
std::cout << "接收到客户端的数据: " << buf << "\n";
// 发送数据给客户端
std::string response = "服务器已收到你发送的数据: " + std::string(buf);
int send_len = send(client_fd, response.c_str(), response.length(), 0);
if (send_len == -1) {
std::cerr << "向客户端发送数据失败\n";
return 6;
}
std::cout << "向客户端发送数据成功\n";
// 关闭socket
close(client_fd);
close(socket_fd);
std::cout << "服务器已关闭\n";
return 0;
}

客户端代码:

#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
int main()
{
// 创建socket
int socket_fd = socket(AF_INET, SOCK_STREAM, 0);
if (socket_fd == -1) {
std::cerr << "创建socket失败\n";
return 1;
}
// 建立sockaddr_in结构体
sockaddr_in addr;
std::memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(12345);
inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);
// 连接服务端
if (connect(socket_fd, (struct sockaddr *) &addr, sizeof(addr)) == -1) {
std::cerr << "连接服务端失败\n";
return 2;
}
std::cout << "已连接服务端\n";
// 发送数据给服务端
std::string msg = "hello, server";
int send_len = send(socket_fd, msg.c_str(), msg.length(), 0);
if (send_len == -1) {
std::cerr << "向服务端发送数据失败\n";
return 3;
}
std::cout << "向服务端发送数据成功\n";
// 接收服务端发送的数据
char buf[1024];
int recv_len = recv(socket_fd, buf, sizeof(buf), 0);
if (recv_len == -1) {
std::cerr << "接收服务端数据失败\n";
return 4;
}
std::cout << "接收到服务端的数据: " << buf << "\n";
// 关闭socket
close(socket_fd);
std::cout << "客户端已关闭\n";
return 0;
}

这个示例代码中,客户端和服务端都使用了TCP协议进行通信。服务端先创建socket并绑定端口,然后监听连接请求并接受客户端连接。客户端先创建socket并连接服务端,然后向服务端发送数据并接收服务端的响应。

回复

我来回复
  • 暂无回复内容

公众号
公众号
创建WIFI码
创建WIFI码
人工客服
分享本页
返回顶部