Сокет recv в с ++

0

Мой код выглядит следующим образом:

char *inBuffer = new char[5];
int recvReturn = recv(Socket, inBuffer, sizeof(inBuffer) - 1, 0);
if (recvReturn <= 0)
{
    m_manager->log("Socket receive error",HIGH_IMPORTANCE);
}
else
{
    std::stringstream ss2;
    ss2<<std::hex;
    for(int i(0);i<5;++i)
      ss2<<(int)inBuffer[i] << ' ';
    m_manager->log(ss2.str(),HIGH_IMPORTANCE);
}

Результат в моем журнале

1 1 6 0 0

Значения на 1 1 6 верны, но 0 0 неверно. Вместо 0 0 я ожидаю 8 9. Что-то не так в коде?

  • 5
    Попробуйте распечатать sizeof(inBuffer) . Это не то, что ты думаешь. (Подсказка: прочитав вопрос, я могу сказать, что вы используете 32-разрядную систему.)
Теги:

1 ответ

1
Лучший ответ

Я вижу 2 проблемы в вашем коде.

  • вы печатаете 5 символов, не гарантируя, что вы получили не менее 5. Вы должны отобразить recvBuffer и/или ограничить количество написанных на нем символов.
  • если вы получили байты со значениями 1, 6, 8, 9, они не являются печатными символами. Код (ASCII) 0 равен 0x30 или 48. Таким образом, ss2.str может быть странным как ss2.str строка.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню