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