【问题标题】:How to get Acknowlegement in TCP communication in Java如何在 Java 中的 TCP 通信中获得确认
【发布时间】:2017-10-17 21:26:18
【问题描述】:

我用 Java 编写了一个套接字程序。服务器和客户端都可以相互发送/接收数据。但是我发现如果客户端使用 TCP 向服务器发送数据,那么一旦服务器接收到数据,TCP 就会在内部向客户端发送确认。我想检测或处理该确认。如何在 TCP 中读取或写入数据以便处理 TCP 确认。谢谢。

【问题讨论】:

  • 请考虑删除对 TCP 的引用并仅讨论应用程序级别的行为。客户端向接收它的服务器发送请求。服务器将消息从应用程序作为响应发送回客户端,但客户端永远不会收到响应。这就是你想说的吗?

标签: java sockets


【解决方案1】:

这根本不可能,即使您是直接针对本机 OS 套接字 API 使用 C 进行编程。套接字 API 的要点之一是它为您抽象了这一点。

在 TCP 层发送和接收数据不一定与您发送或接收数据的 Java 调用相关。您在一次 Java 调用中发送的数据可能会被分成几部分,这些部分可能会被缓冲、独立发送和接收,甚至是乱序接收。

有关此问题的更多讨论,请参阅here

【讨论】:

    【解决方案2】:

    通过 TCP 套接字发送的任何数据都会在两个方向上得到确认。就 TCP 有线通信和应用程序信令而言,从客户端发送到服务器的数据与从服务器发送到客户端的数据相同。正如@Eric 所提到的,没有办法得到那个信号。

    您可能正在谈论等待服务器响应时的超时。您想检测响应是否花费了太长时间。客户端的消息是否可能大于服务器的响应,因此缓冲阻碍了响应而不是初始请求?您是否尝试过使用非阻塞套接字?

    如果您还没有这样做,您可能想看看NIO code。它有许多类可以让您对套接字通信进行更精细的控制。

    【讨论】:

    • 不正确,看我的回答,蔚来在这件事上一点帮助都没有。
    • 对不起,怎么不对?从客户端发送到服务器的字节与从服务器发送到客户端的字节有什么区别?我怀疑这个问题将 TCP 套接字与(正如你提到的)缓冲和其他问题混淆了,这就是我提到非阻塞和 NIO 的原因。
    • 这是不正确的,因为它没有回答问题。他想“检测或处理该确认”,而这个答案中没有任何内容可以解决这个问题。
    • 哇。一个2岁的线程。你显然支持@EJP。 :-) 我同意答案是低于标准的。我会调整它。
    【解决方案3】:

    这在纯 Java 中是不可能的,因为 Java 的网络 API 都处理套接字,这隐藏了所有 TCP 细节。

    您需要一个可以处理 IP 层数据的协议,以便您可以获取 TCP 标头。 DLPI 是最流行的 API,

    http://www.opengroup.org/onlinepubs/9638599/chap1.htm

    不幸的是,没有这种网络的 Java 实现。您必须通过 JNI 使用本机代码来执行此操作。

    【讨论】:

      【解决方案4】:

      我想检测或处理该确认。

      在协议栈之上的任何级别都没有用于接收或检测 ACK 的 API。

      重新考虑您的要求。知道数据已经到达服务器对应用程序没有任何用处。您想知道的是对等应用程序已收到它,在这种情况下,您必须让对等应用程序在应用程序协议级别进行确认。

      【讨论】:

      • “TCP/IP 实践‘选择性 ACK’。并非每个字节/数据包/段都得到确认。”当我读到它时,这是不正确的。 SACK 是关于通知发送方丢失数据包之前的数据包已经收到,因此只有丢失的数据包需要重新传输。如果一个数据包到达接收器,它被确认——在一个特定的确认中或作为累积确认的一部分。
      • 同意,修改。我的答案的其余部分仍然适用。
      • 您没有在回复中@Gray 我,所以我没有回来看到您对帖子进行了重大编辑以删除不正确的信息。已删除反对票。我希望您所有的 1740 次投票都对 EJP 发表了评论? :-)
      • @Gray 如果您的意思是我对其他问题或答案的否决,是的,除非我改为对现有评论投赞成票,或者可能投票结束。感谢您的留言。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-31
      • 2013-04-30
      • 2019-11-14
      • 2018-12-23
      • 2015-05-24
      • 2010-10-12
      • 2014-07-25
      相关资源
      最近更新 更多