如何从 recvfrom() 检查消息大小?

Posted

技术标签:

【中文标题】如何从 recvfrom() 检查消息大小?【英文标题】:How do I check the message size from recvfrom()? 【发布时间】:2011-11-07 22:32:14 【问题描述】:

如何检查来自recvfrom() 的消息在 Windows 上的 C 或 C++ 中的大小是否正确?

谢谢。

【问题讨论】:

什么是 Visual Studio 3.0? .NET 与此有什么关系?您是指“Visual Studio .NET 2003”附带的 Visual C++ 编译器吗? 【参考方案1】:

recvfrom 返回实际接收到的数据报的字节数。

你只需要

if (iResult < 0)  /* network error */ 
if (iResult != BufLen)  /* wrong size */ 

老答案,离题

您应该声明一个变量来保存大小,并将其地址作为fromlen 参数传递。

recvfrom会填写datagram发件人地址的实际大小(IP和端口,所以你可以根据需要回复)。

然后您可以根据您的预期测试实际尺寸。

【讨论】:

@Tommy:真的很抱歉,fromlen 参数获取的是发送者地址(IP 和端口)的大小,而不是数据包的大小。包内容的大小就是返回值。修正了我的答案。

以上是关于如何从 recvfrom() 检查消息大小?的主要内容,如果未能解决你的问题,请参考以下文章

Windows 上没有从 recvfrom 收到任何内容

如何检查发送的消息的大小

recvfrom() 即使是第一次调用中的 UDP 消息,也不会填充来自 IP 地址

recvfrom() 不返回接收到的字节数

UDP和套接字,recvfrom()返回-1,资源暂时不可用

实现UDP高效接收/响应