我的程序是一个网吧程序,服务器将控制客户端(开 - 关帐户,发送文件,截屏,关闭正在运行的应用程序等),客户将能够:订购饮料,发送消息等。
因此,为了获得最佳性能,我应该使用TCP还是UDP?提前致谢
答案 0 :(得分:7)
为了大幅减少编码工作量,痛苦,调试,用户投诉等,请使用TCP。
答案 1 :(得分:3)
我宁愿选择可靠性而是使用TCP。此外,对于传输文件(您提到的屏幕截图),UDP不太适合,因为数据包可以无序到达您,您将不得不重新排序它们=>你需要在UDP等等之上编写一些数据包编号。(TL; DR使用TCP)。
答案 2 :(得分:2)
鉴于您可能只有几十台连接到服务器的客户端计算机,并且它们都将在局域网上运行,那么性能不是您最关心的问题。
鉴于此,TCP肯定是要走的路。您不希望UDP可能发生无序数据包,丢弃数据包和重复数据包的麻烦(尽管通过LAN,很多问题都被最小化 - 尽管没有消除)。
答案 3 :(得分:1)
在这种情况下,我无法想到为什么要选择UDP。
答案 4 :(得分:0)
UDP肯定会为您提供最佳性能,因为它无连接(您在传输过程中保存了来自TCP和TCP标记管理的昂贵connect
调用)。但是,在您的通信中开发一些安全确认,因为无法保证传输。然而,在本地网络中,它应该很少成为问题,除非您的客户拉动或扭曲电缆:-)。如果您的协议变得更复杂,并且在重新发明轮子之前需要的不仅仅是命令/响应对,而是考虑使用TCP。
答案 5 :(得分:0)
恕我直言,TCP和UDP之间的主要区别在于,TCP确保包到达目的地而UDP不到。因为UDP比TCP快一点。
据我了解你的程序,我会使用TCP,因为你的任务,似乎必须工作,网络连接必须可靠。 我会将UDP仅用于任务,其中一些包可能丢失,例如从传感器广播温度。
答案 6 :(得分:0)
UDP中的U通常被认为代表不可靠(*)。如果您使用UDP,那么任何时候(并且会有一些!)您需要在服务器网络中获得可靠性,您需要编写自己的更高级协议以检测数据包丢失,执行重试等。这并不简单,在“用户空间”应用程序中尤其难。 TCP处理数据包丢失检测,乱序数据包检测,重试等等......无需在应用程序级别担心它。
另一个问题是,许多防火墙,路由器,网关等都会默认阻止所有UDP流量。
IMO,您应仅考虑在以下情况下使用UDP:
[* - 实际上,UDP代表用户数据报协议。]