通过套接字发送的字节比我应该接收的字节多

More bytes sent than what I should receive via socket

本文关键字:字节 我应该 套接字      更新时间:2023-10-16

在我的应用程序中,我发现我收到的比我预期的多2个字节。我不知道这两个字节是什么意思,因为在客户端,我记录发送的字节,我在服务器上接收所有字节,但在数据之后,我仍然收到这两个字节,这使我的程序崩溃。为什么?任何想法?

编辑1

在客户端

int sentBytes = send(socket, data, size, 0);

和服务器端

int receivedBytes = SOCKET_ERROR;
char *header = new char[8];
receivedBytes = recv(socket, header, 8, 0);
if (receivedBytes == 0 || receivedBytes == WSAECONNRESET)
{
    ...
}
else
{
    size_t data_size = 0;
    std::istringstream is(std::string(header, 8));
    if (!(is >> std::hex >> data_size))
    {
        char *data = new char[data_size + 1];
        data_size = recv(socket, data, data_size, 0);
    }
}

我正在使用WSAAsyncSelect的win32消息循环

编辑2

我使用前8个字节来发送一个十六进制值,该值包含我应该在服务器上接收的消息的长度

  1. 你没有检查你在第一次读取时得到的恰好是8个字节。可能更少。
  2. 我希望这是TCP,因为使用UDP,您将读取第二个recv()的下一个数据包。