发送的字节数多于我通过套接字接收的字节数

时间:2011-04-28 16:55:47

标签: c++ winapi sockets

在我的应用程序中,我发现我收到的信息比我预期的多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 个答案:

答案 0 :(得分:2)

  1. 您不会检查第一次读取时是否正好有8个字节。它可能更少。
  2. 我希望这是TCP,因为使用UDP,您将使用第二个recv()读取下一个数据包。