写点什么

一个解决 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

用户头像

还未添加个人签名 2020-11-26 加入

C/C++linux服务器开发群 812855908

评论

发布
暂无评论
一个解决tcp粘包问题的c++代码_TCP_linux大本营_InfoQ写作社区