当前位置: 首页 > 编程语言 > C#

C#学习教程:.NETTCP协议的可靠性如何?分享

时间:2023-04-11 02:32:08 C#

.NETTCP协议的可靠性如何?我是C#的新手,所以请多多包涵。我用C#.NET4.0编写了一个相对简单的客户端服务器应用程序。我使用TCP协议,更具体地说,TCPListener和TCPClient。我知道TCP协议在理论上是如何工作的。但我必须100%确定在数据传输过程中不会出现(未处理的)错误。发送数据后如何知道数据是否接收成功。是否可以完全依赖TCP协议的底层实现?这样我就不用向对方确认数据已经收到了吗?至关重要的是,我实际上知道发送并成功接收了哪些数据。我知道这是一个愚蠢的问题,但我真的很想确定。感谢您的时间和答复。TCP保证:它不能保证啮齿动物不会吃掉您的电缆,建筑物的电力将继续,甚至当操作系统告诉它某些数据已到达时,您操作的另一台机器上的进程会受到干扰。如果您需要确认数据已收到并据此采取行动,您需要手动发送确认(因为TCP连接是双工的,您已经有执行此操作的通道)。当然,这些都不是特定于.NET、Windows或任何其他网络堆栈实现的。更新:我想特别指出的是,在操作系统网络堆栈接受数据传输后,您无法知道另一端的进程是否收到了该数据。在大多数情况下,网络堆栈知道数据已经到达目标(通过TCPACK消息),但它不知道目标上的操作系统是否已经将它们提供给它们预期的进程。所以发回你自己的“数据接收和执行”消息是唯一的选择。仅使用TCP/IP,您无法确定是否收到了任何数据-您必须在顶部添加另一个协议。如果您可以查看是否收到了某些特定数据,则TCP/IP会保证所有数据直到收到为止。没有“.NETTCP协议”这样的东西。只有TCP协议,它已经在Internet上运行了大约30年。它很结实。这是一个设计目标。一种选择是使用基于TCP的WCF可靠会话。WCF可靠会话将掩盖传输故障。如果你真的需要可靠性和网络传输,为什么不使用消息队列呢?他们有事务保证(与使用它的开发人员的纪律一样强,但不强!)这就像所有具有数据库服务器类型安全性(和同上性能)的流量一样。我认为您可以轻松配置.NETRemoting以使用MSMQ通道。我个人从未这样做过,但我一般都使用过消息队列。以上是C#学习教程:.NETTCP协议有多可靠?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

猜你喜欢