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的主要内容,如果未能解决你的问题,请参考以下文章

socket 的recv函数返回0应该怎样处理

linux socket阻塞recv怎么返回

Python socket.recv() 返回新行?

socket编程·send和recv

手把手写C++服务器(38):面试必背!Linux网络socket编程必会十问!

recv函数返回啥值?