C++ 套接字 recv() 总是 returns 0

C++ Socket recv() always returns 0

这确实有效:

char blockSize[4];
int r = recv(socket, blockSize, 4, 0);

这不起作用。它总是 returns 零,为什么?

size_t blockSize = 0;
int r = recv(socket, (char*)blockSize, 4, 0);

这不是什么大问题,我知道如何将 char 数组转换回 size_t。但我只想知道为什么它不起作用。

在第一个示例中,您将 blockSize 地址 (通过数组衰减)传递给 recv()

在第二个示例中,您将 blockSize 传递给 recv(),类型转换为指针。由于 blockSize 为 0,因此指针实际上是 nullptr。您需要传递 blockSize 地址 。另外,size_t不保证是4个字节,所以用(u)int32_t代替,例如:

uint32_t blockSize = 0;
int r = recv(socket, (char*)&blockSize, 4, 0);