【问题标题】:Should I be afraid to use UDP to make a client/server broadcast talk?我应该害怕使用 UDP 进行客户端/服务器广播吗?
【发布时间】:2013-08-06 00:26:21
【问题描述】:

在过去的两天里,我阅读了关于 Indy TCPUDP 协议的每个 StackOverflow 问题和答案(当然还有谷歌搜索),以便决定我应该使用哪一个我的用户应用程序和我的 Windows 服务之间的通信方法。

从我目前看到的情况来看,UDP 是最简单的,也是唯一一个我设法从TidUDPClient 接收广播消息的人(我还没有测试回复)。而且我还注意到TCP 的线程循环有点复杂。

但由于我到处都被告知 UDP 不可靠,UDP 也不可靠......我开始怀疑是否还是使用TCP 不是更好。

我的用户应用程序将在多台机器上运行,服务将在其中一台机器上运行,与客户共享一个IP,或者在专用机器上运行,具体取决于我客户的资金。那么,我真的应该担心UDP 数据丢失的可能性吗?

我需要广播功能,因此我的服务器会立即通知所有客户端有关应用程序更新的信息,当然,如果我的客户端应用程序不知道服务/服务器在哪个 IP 中,它将发送一个广播调用告诉服务器在哪里。这适用于TCP吗?


我发送的消息是对用户访问确认、用户权限和应用程序可执行文件更新的请求,因为主应用程序无法自行更新。 这些消息是像下面这样加密的,有时它们可​​能会下更大的赌注。

e86c6234bf117b97d6d4a0c5c317bbc75a3282dfd34b95446fc6e26d46239327f2f1db352b2f796e95dccd9f99403adf5eda7ba8

【问题讨论】:

  • 你应该这样吗?你送什么?这些消息对于您的客户来说是绝对必要的吗?如果您正在流式传输数据,例如音频或视频,那么不用担心。但是,如果它们是关于状态的消息,或者是客户端机器的“重要更新”,那么是的。您也可以将两者混合使用。
  • @KirkBackus 我已经用这些信息更新了问题。
  • 太棒了!是的,您绝对应该使用 TCP。但是,您不必这样做。您可以使用 UDP,但您必须有一个确认系统来确保信息到达那里(这是 TCP 已经解决的问题)
  • 你应该做更多的研究。 Tcp Reliability versus Udp Burdens 有一个公认的答案,其中包含许多讨论 UDP 可靠性的链接,所有这些链接的共同答案是“如果您可以处理丢失的数据包,请使用 UDP”。由于您想将其用于访问信息、权限和软件更新,您真的会丢失数据包吗? (当您使用无法运行的损坏替换更新可执行文件时会发生什么?当用户由于数据包丢失而无法访问时会发生什么?)

标签: delphi tcp udp indy broadcasting


【解决方案1】:

我决定同时使用它们!

简单用例:

为了与TCP prococol 通信,您必须建立一个连接,只有在两端都知道IPPort 时才能拥有该连接。

如果您在加载应用程序时没有该信息,那么您使用UDP 广播您的IP 地址和您寻找/a 服务器的意图。您可以尝试大约 5 次,然后再向用户提出错误,告知您没有找到服务器或服务器已关闭。

UDP 中发送该消息将(一次或多次)到达服务器的UDP 耳朵,它现在将知道来自孤独客户端的IP 的IP,现在将通过@987654330 开始正确的连接@ to be read 谈论应用程序的关键信息。

您如何看待这种方法?

【讨论】:

  • UDP 的使用并不少见,因此通常可以使用。但这不是唯一的选择。还有其他可用于在网络上定位服务的发现协议。多播可能更适合状态广播等。
  • ActiveMQ-Server 正在向所有客户端发送带有地址的 UDP 广播
  • 当我没有找到任何其他方法时,我得出了一个结论,如果我只走这两条路中的一条,我就会失去一些东西。
猜你喜欢
  • 2010-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
  • 2016-05-24
  • 2018-11-14
  • 1970-01-01
相关资源
最近更新 更多