我想阅读从客户端发送的所有消息。 我正在实现一个 tcp 服务器并接收数据。每条消息都附加了消息的大小作为标题。所以现在我可以读取 header 并从中找到大小并为稍后读取的消息分配那么多内存。然而,由于我很少接触 C++,这就是我想出的。
如何阅读所有消息?
void *dothistask(void *socket_desc)
{
int sock = *(int*)socket_desc;
free(socket_desc);
int read_size;
unsigned int x = 4;
char *header = (char*)malloc(sizeof(char) * 4);
char *message;
int index = 0;
long p;
int status;
while(true) {
status = ReadXBytes(sock, 4, header);
if(status == -1)
{
break;
}
message = (char *)malloc(sizeof(char) * 10);
status = ReadXBytes(sock, 10, message);
if(status == -1)
{
break;
}
cout<<"The header is "<<header<<endl;
cout<<"The message is "<<message<<endl;
}
return 0;
}
int ReadXBytes(int socket, unsigned int x, void* buff)
{
char *buffer = (char*)buff;
int bytesRead = 0;
int result;
while (bytesRead < x)
{
result = recv(socket, buffer + bytesRead, x - bytesRead, 0);
if(result == 0)
{
cout<<"Client disconnected"<<endl;
fflush(stdout);
return -1;
}
else if( result == -1)
{
perror("recv failed");
return -1;
}
bytesRead += result;
}
return 0;
}
阅读,最理想的是先阅读标题,再阅读消息。我可以这样做一次,但我想在一段时间内重复这样做,基本上是永远,直到客户端断开连接。
谢谢!寻求帮助!
最佳答案
要阅读消息,您必须
ReadXBytes(sock, 10, message);
但它应该是这样的
ReadXBytes(sock, *((int*)header), message);
取决于标题的内容。因为你有一个硬编码的 10
在那里,你只会读取 10 个字节。您还必须相应地调整 malloc
以不仅分配 10 个字节。
关于c++ - 无法读取客户端发送的所有消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36856936/