如何使用 TCP 协议检查字节是否已成功发送?

viy*_*ncs 5 sockets tcp

我在进行网络编程时遇到了问题。我使用 TCP 协议在服务器和客户端之间进行通信。我的代码正在运行,但我还无法检测到数据是成功发送还是失败了。我有以下问题:

  1. 如何检查字节是否已通过套接字 TCP 成功发送?
  2. TCP协议中的确认(ACK)是如何工作的?
  3. 如何使用套接字编程进行安全通信?

您可以使用 C#、Java 或 PHP 进行解释。

Gre*_*pff 5

TCP/IP 如何工作的解释最好作为研究练习,而不是一个特别的 SO 问题。虽然通常的第一站可能是Wikipedia,但这可能不会从概念层面给你一个很好的介绍。在评论中还有一个指向TCP 教程的链接。

但本质上,TCP 顾名思义,是一种传输控制协议,它提供了一种可靠传送字节流的机制。给定字节流,TCP 基本上确保接收方以正确的顺序接收字节。如果流中间的一个字节“丢失”,则 TCP 可以检测到这一点并安排其重新传输。所有这些对接收方都是透明的。TCP 的神奇之处在于,接收方只是从套接字中读取数据,并且数据看起来完整无缺且顺序正确。

当您使用 TCP 套接字时,您无需处理 ACK 和 NACK 以及重传。所有这些对您的应用程序都是透明的。

现在,您可以检测到另一端已离开,但您无法知道另一端是否确实收到了您的消息。这是二将军的问题

但实际上,如果您对 TCP 的工作方式感兴趣,请阅读W Richard Stevens 的 TCP/IP Illustrated。不是试图说服您,而是要理解它,您确实需要离开并阅读它(在线或在枯树上)。

  • 怎么知道另一端已经消失了?(发送不返回任何错误/异常,但不传递消息。) (2认同)