如何从 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() 检查消息大小?的主要内容,如果未能解决你的问题,请参考以下文章
recvfrom() 即使是第一次调用中的 UDP 消息,也不会填充来自 IP 地址