Отправлено больше байтов, чем я должен получить через сокет - PullRequest
1 голос
/ 28 апреля 2011

в своем приложении я обнаружил, что получаю на 2 байта больше, чем я ожидаю. Я не знаю, что означают эти 2 байта, потому что в клиенте я регистрирую отправленные байты и получаю все на сервере, но после данных я все еще получаю эти 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);
    }
}

Я использую цикл сообщений win32 с WSAAsyncSelect

РЕДАКТИРОВАТЬ 2

Я использую первые 8 байтов для отправки шестнадцатеричного значения, которое содержит длину сообщения, которое я должен получить на сервере

1 Ответ

2 голосов
/ 28 апреля 2011
  1. Вы не проверяете, что вы получили ровно 8 байт при первом чтении.Это может быть меньше.
  2. Я надеюсь, что это TCP, так как с UDP вы будете читать следующий пакет со вторым recv().
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...