2

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

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

我一直在阅读有关多播的内容,当谈到接收器时,我注意到在大多数语言(即 java 或 c#)中,接收器通常指示端口号和多播 IP 地址,但何时与服务器正在制作?套接字何时绑定到真实的服务器 IP 地址?

提前致谢

4

2 回答 2

1

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

如果您想要真正的多播,您需要找到允许设置选项的套接字的快速实现。此操作的常用名称是setsockopt. 多播发送方不需要基本的 UDP 套接字(我建议使用 UDP,而不是 IP),而发送方需要添加到多播组。这个Python 示例很好地描述了它。

但是,值得注意的是路由器不路由广播和多播。因此,您不能通过互联网使用它。如果您需要在项目中使用互联网,我建议您使用 TCP - 如果您的客户端是浏览器,则使用 websockets - 并手动将消息发送到它们的“组”。

于 2017-11-21T06:29:19.270 回答
1

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

于 2017-11-23T22:01:47.607 回答