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);
这确实有效:
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);