【发布时间】:2013-08-06 00:26:21
【问题描述】:
在过去的两天里,我阅读了关于 Indy TCP 和 UDP 协议的每个 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