2010-06-18 97 views
21

我不知道如何最好地解决我的问题。我有一个在远程机器上运行的服务,接收并处理UDP数据包。我希望服务能够将这些数据包重新发送给任何想要它们的人(可能是没有人的,通常是一台机器,但可能更多)通过互联网的UDP组播?

我认为UDP多播是理想的 - 该服务可以发送到多播组,并且无论多少个接收者已经注册,或者甚至没有注册。

不过,我希望能够我收集这是近了,就不可能用UDP多播访问此通过互联网和。有没有另外一种方法可以用来实现这一点?

如果相关,我的两个客户端和服务都写在C#。

回答

20

一般来说,这是不可能的,因为多播数据包不会被路由。

有一些技巧来解决这个(DVMRP,MOSPF等),但它们都需要,你可以配置所有的服务器和客户端之间的路由器(或创建一个隧道)。有多播支持的骨干网络(Abilene,Mbone),但这些网络对于大学等是最感兴趣的。普通消费者的互联网没有多播。

不幸的是,您需要点对点通信。但是你身处公司,互联网,广播和电视都是点对点的,无数次传输相同的数据。非常浪费带宽。

+2

MBONE被关闭很久以前,IPv6的组播强制要求,一些ISP具有IPv4的组播支持DVB如德国和英国。 – 2010-06-26 03:54:11

+3

许多服务使用UDP或PGM进行本地多播。如果您需要通过互联网连接其他网络(例如远程站点),则可以使用TCP通道,该通道监听本地UDP并将通信路由到重新广播的另一端。这适用于连接两个办公室等。如果您需要UDP协助,请参阅以下教程:http://jarloo.com/code/networking/c-udp-multicasting-tutorial/ – Kelly 2011-02-15 02:46:46

11

的优选的方法是使用对等体之间的覆盖多播,即使用TCP链接和执行上述该组播语义。

许多IPv4路由器不支持组播或使其功能,IPv6的任务是支持多播和广播语义已被删除。