C++ Socket recv() 总是返回 0

Posted

技术标签:

【中文标题】C++ Socket recv() 总是返回 0【英文标题】:C++ Socket recv() always returns 0 【发布时间】:2021-12-14 03:32:55 【问题描述】:

这确实有效:

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

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

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

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

【问题讨论】:

您的意思是写(char *) &blockSize?否则你只是传递指针 0。 @PresidentJamesK.Polk 哦,当然-.- 谢谢! 【参考方案1】:

在第一个示例中,您将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);

【讨论】:

以上是关于C++ Socket recv() 总是返回 0的主要内容,如果未能解决你的问题,请参考以下文章