我有一个模棱两可的问题,我在两个用户之间有一个多播组,其中一个是发送者而另一个是接收者我在每一方做了这些场景:
接收器:
发信人:
在上面这种情况下,当发送方发送数据接收方无法接收但是如果我们通过tcpdump检查接收方,则从组播组接收到数据。 但如果接收方没有连接到发送方,则会收到数据。
但实际上,如果我们让发送方在发送到组播组之前绑定到组播地址,并且接收方连接到发送方,因为上面的方案数据将被成功接收!!!! 我们在发送方添加绑定时的任何解释???
答案 0 :(得分:2)
您可能希望connect(2)
发送方的套接字到多播组以加快发送速度,但不要connect(2)
接收方,因为它将其限制为单播(是的,它有点令人困惑,但是这是它的工作方式)。只需bind(2)
接收者到组/端口,然后使用setsockopt(2)
IP_ADD_MEMBERSHIP
加入该组。
答案 1 :(得分:0)
没有“连接UDP多播”这样的东西。它是连接的还是多播的。完全删除connect()步骤。
答案 2 :(得分:0)
在接收方,bind()和connect()调用都做同样的事情:它们将给定的Internet套接字地址与给定的无连接套接字相关联。对于bind()
呼叫 - 其中Internet套接字地址是多播组的地址 - 这意味着套接字仅接收目标地址为多播组的UDP数据包。对于connect()
调用 - 其中Internet套接字地址是发送方的地址 - 这意味着套接字只接收目标地址是发送方的UDP数据包,这不是你的想。
connect()
调用覆盖了bind()
调用,导致没有收到数据包。
将bind()
呼叫替换为connect()
呼叫到多播组,您仍应接收UDP数据包 - 或仅保留bind()
呼叫。这是你的电话。