如何在swift中实现多播套接字?

时间:2017-11-21 04:32:57

标签: swift sockets server multicast perfect

我正在编写一个服务器,除其他外,需要不断地在不同的多播地址中发送数据。正在发送的包可能会被客户端(应用程序)接收,该客户端将在所提到的地址之间切换。

我使用Perfect(https://github.com/PerfectlySoft/Perfect)来编写服务器端,但是使用Perfect-Net模块或使用CocoaAsyncSocket都没有运气。我如何使用swift实现发送方和接收方?任何可能的片段都非常有用。

我一直在阅读关于多播的内容,当涉及到接收器时,我注意到在大多数语言(即java或c#)中,接收器通常指示端口号和多播ip地址,但什么时候与服务器的连接?套接字何时绑定到真实服务器ip-address?

提前致谢

2 个答案:

答案 0 :(得分:1)

如果我们谈论TCP / IP堆栈,只有IP和UDP支持广播和多播。它们都是无连接的,这就是为什么你只看到发送和接收到特殊的多播地址,但没有绑定和连接。您可以在不同的语言中看到它,因为(a)协议与语言无关,并且(b)大多数实现都在努力尝试与BSD套接字接口兼容。

如果您想要真正的多播,您需要找到允许设置选项的快速套接字实现。此操作的常用名称为setsockopt。多播发送方不需要基本UDP套接字(我建议使用UDP,而不是IP),而发送方needs to be added to a multicast group。这个Python example几乎描述了它。

但是,值得注意的是路由器不会路由广播和多播。因此,您无法通过互联网使用它。如果您需要在项目中使用互联网,我建议您使用TCP - 或者如果您的客户是浏览器,则使用websockets - 并向" groups"他们手动。

答案 1 :(得分:1)

我猜你真的想要Perfect-Kafka或Perfect-Mosquitto - Message Queue,它允许服务器向客户端订阅者发布实时流。低级套接字不能轻易满足您的要求。