一个解决 tcp 粘包问题的 c++ 代码
作者:linux大本营
- 2023-04-26 湖南
本文字数:884 字
阅读完需:约 3 分钟
tcp 粘包问题,这是个非常棘手的问题。以下是一个使用 c++解决 TCP 粘包的例子,希望能为你提供帮助:
#include <iostream>#include <string.h>#include <arpa/inet.h>#include <sys/socket.h>
using namespace std;
int main(){ int socket_fd; socket_fd = socket(AF_INET, SOCK_STREAM, 0); if(socket_fd == -1) { cout << "Socket creation failed" << endl; return -1; }
struct sockaddr_in server_address, client_address;
memset(&server_address, 0, sizeof(server_address)); server_address.sin_family = AF_INET; server_address.sin_port = htons(8080); server_address.sin_addr.s_addr = INADDR_ANY;
if(bind(socket_fd, (struct sockaddr *)&server_address, sizeof(server_address)) < 0) { cout << "Bind failed" << endl; return -1; }
listen(socket_fd, 3);
int client_socket; int client_address_length = sizeof(client_address); client_socket = accept(socket_fd, (struct sockaddr *)&client_address, (socklen_t *)&client_address_length);
int read_size; char client_message[256];
while((read_size = recv(client_socket, client_message, 256, 0)) > 0) { int start = 0; for(int i = 0; i < read_size; i++) { if(client_message[i] == '\n') { client_message[i] = 0; cout << "Received message: " << &client_message[start] << endl; start = i + 1; } } }
if(read_size == -1) { cout << "Recv failed" << endl; }
return 0;}
复制代码
该代码使用了循环接收客户端的消息,每当接收到\n时,我们认为这是一条完整的消息。我们将字符串中的\n替换为 0,并打印出一条完整的消息。
相关技术视频教程:c/c++ linux服务器开发/后台架构师免费学习地址
c/c++后端技术交流群:579733396
划线
评论
复制
发布于: 刚刚阅读数: 3
linux大本营
关注
还未添加个人签名 2020-11-26 加入
C/C++linux服务器开发群 812855908










评论