Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets winsock如何区分同一端口上的单播和多播数据?_Sockets_Winsock_Multicast - Fatal编程技术网

Sockets winsock如何区分同一端口上的单播和多播数据?

Sockets winsock如何区分同一端口上的单播和多播数据?,sockets,winsock,multicast,Sockets,Winsock,Multicast,我正在使用Winsock2开发我的应用程序。在我的例子中,源设备将通过同一端口向目标设备发送单播和多播UDP数据报。在接收端,我创建了两个套接字,一个用于接收单播数据报(名为socket1),另一个用于接收多播(名为socket2)。Socket2被添加到分配的多播组中。问题在于,由于两个套接字绑定到同一个端口,socket2将接收应该由socket1接收的单播数据报 我尝试将socket2绑定到多播IP地址,而socket1仍然绑定到本地IP地址,但socket2的绑定操作失败。我在这里看到一

我正在使用Winsock2开发我的应用程序。在我的例子中,源设备将通过同一端口向目标设备发送单播和多播UDP数据报。在接收端,我创建了两个套接字,一个用于接收单播数据报(名为socket1),另一个用于接收多播(名为socket2)。Socket2被添加到分配的多播组中。问题在于,由于两个套接字绑定到同一个端口,socket2将接收应该由socket1接收的单播数据报

我尝试将socket2绑定到多播IP地址,而socket1仍然绑定到本地IP地址,但socket2的绑定操作失败。我在这里看到一些线程,他们说绑定到多播IP地址在Windows上不受支持,但在Linux/BSD上受支持。这是真的吗?是否有任何文件或信息说明这一点

如果Windows不支持绑定到多播IP地址,我如何使用一些IP级别或套接字级别选项来区分同一端口上的单播和多播数据报?或者我必须制定具体的过滤规则来实现这一点

谢谢


Ryan

这实际上是一个非常有趣的问题。我对Winsock一无所知,我的经验只是使用BSD sockets API,但是否可以检查数据包的IP头的目标地址?它有点脏,但可能有效?你确定你真的在乎它是什么吗?不管怎样,为什么不只用一个插座呢?很明显,这就是目的,因此使用了单端口。to EJP:恐怕我必须关心传输的类型,所以我想在接收数据报时区分它们(通过使用两个不同的套接字或使用单个套接字)。如果使用单套接字,我认为区分它们的唯一解决方案是分析IP头中的目标地址,但正如Matt Patenaude所说,这有点脏。你有什么好主意来解决这个问题吗?我不同意马特的建议是“有点脏”。它准确无误地告诉你想知道什么。唯一的选择是检查有效载荷。