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










    
评论