gpt4 book ai didi

c++ - UDP recv/recv 来自多个发件人

转载 作者:太空狗 更新时间:2023-10-29 20:06:15 24 4
gpt4 key购买 nike

美好的一天,

我正在用 VC++ 开发一个应用程序,它使用 UDP 协议(protocol)与 Windows XP 上的 winsock 进行通信。以前我已经能够假设该工具接收到的所有数据包都来自一个目标。但是我现在正在接收广播。监听线程的开销很小,应该将所有时间都花在下面这行上:

rv = recvfrom(socket, 
p_buffer_p,
p_size,
0,
(sockaddr*)&clientService_in, //This is set to do a broadcast recv
&SenderAddrSize);

我的问题是我是否可以假设从 recvfrom 的单个返回中获得的缓冲区来自单个目标。也就是说,发送应用程序中发送的 1 次调用是否等于接收应用程序中 recvfrom 的 1 次返回?或者可以将来自多个发件人的多个发送合并为 1 个吗?

我假设来自目标的单个发送不能从 recvfrom 拆分为多个返回。我一直都这么认为,而且从来没有遇到过问题。

还有一件事,它是一种 SOCK_DGRAM 类型的套接字。

最佳答案

不可以,UDP 消息不能拆分。他们被发送时到达。此外,不会串联多个 UDP 消息。

所以N个sendto消息对应N个recvfrom调用。

引自 wiki :

Datagrams – Packets are sent individually and are checked for integrity only if they arrive. Packets have definite boundaries which are honored upon receipt, meaning a read operation at the receiver socket will yield an entire message as it was originally sent.

关于c++ - UDP recv/recv 来自多个发件人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8748711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com