c++中的套接字recv

Socket recv in c++

本文关键字:recv 套接字 c++      更新时间:2023-10-16

我的代码如下

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

1 1 6上的值是正确的,但0 0是错误的。我期望8 9而不是0。代码中有什么错误吗?

我可以在您的代码中看到两个问题。

  • 您打印了5个字符,却没有确保收到至少5个字符。您应该显示recvBuffer和/或限制写入的字符数
  • 如果接收到值为1、6、8、9的字节,则它们是而不是可打印字符。0的(ASCII)码是0x30或48。所以ss2.str作为一个可打印的字符串可能很奇怪