Delphi 我是否应该害怕使用UDP进行客户端/服务器广播对话?

Delphi 我是否应该害怕使用UDP进行客户端/服务器广播对话?,delphi,tcp,udp,indy,broadcasting,Delphi,Tcp,Udp,Indy,Broadcasting,在过去的两天里,我阅读了关于IndyTCP和UDP协议的每个StackOverflow问题和答案(当然还有谷歌搜索),以决定在我的用户应用程序和Windows服务之间的通信方法中应该使用哪一个 从我目前看到的情况来看,UDP是最简单的,也是我唯一设法从TidUDPClient接收广播消息的方法(我还没有测试响应)。我还注意到TCP的线程循环有点复杂 但由于我被告知,UDP不可靠,UDP不可靠。。。我开始怀疑使用TCP是否更好 我的用户应用程序将在许多机器上运行,服务将在其中一台机器上运行,与客户

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

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

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

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

我需要广播功能,以便我的服务器立即通知所有客户端有关应用程序更新的信息,当然,如果我的客户端应用程序不知道服务/服务器位于哪个
IP
,它将发送广播呼叫,告知服务器在何处。这是否适用于
TCP


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


E86C6234BF117B97D6D4A0C5C317BBC75A3282DFD34B95446FC6E26D46239327F2F1DB352B2F796E95DC9F99403ADF5EDA7BA8
我决定两者都用

简单用例:

为了与
TCP
prococol进行通信,您必须建立一个连接,只有在两端都知道
IP
Port
的情况下,才能建立该连接

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

UDP
中发送该消息将(一次或另一次)到达服务器的
UDP
耳朵,服务器现在将从孤独客户端的
IP
知道IP,并且现在将通过
TCP
开始正确连接,以便阅读并谈论应用程序的关键消息


你认为这种方法怎么样

那你该怎么办?你要送什么?这些信息对于你的客户来说是绝对必要的吗?如果您正在流式传输数据,如音频或视频,则不必担心。但是,如果它们是关于状态的消息,或者是对客户机的“重要更新”,那么是的。你也可以把两者混合起来。@KirkBackus我已经用这些信息更新了这个问题。太棒了!是的,你绝对应该使用TCP。然而,你不必这么做。您可以使用UDP,但是您必须有一个确认系统来确保获得的信息(这是TCP已经解决的问题)您应该做更多的研究。有一个公认的答案,其中有许多讨论UDP可靠性的链接,所有这些链接的常见答案是“如果可以处理丢失的数据包,请使用UDP”。当您想要使用它访问信息、特权和软件更新时,您真的会丢失数据包吗?(当用损坏的替换文件更新无法运行的可执行文件时会发生什么情况?当用户因为数据包丢失而无法访问时会发生什么情况?)UDP的使用并不少见,因此通常可以正常工作。但这不是唯一的选择。还有其他发现协议可用于在网络上定位服务。多播可能更适用于状态广播等。-服务器正在向所有客户发送一个带有地址的UDP广播。这是我得出的结论,当我没有找到任何其他方法时,如果我只走这两条道路中的一条,我会失去一些东西。