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