【问题标题】:Is there a way to determine whether the data has been received in a TCP Java Socket有没有办法确定数据是否已在 TCP Java Socket 中接收到
【发布时间】:2011-06-20 11:19:49
【问题描述】:

有没有人知道是否有办法判断通过 Java TCP Socket 发送的数据是否已被接收?

TCP 协议应该将最后确认的字节存储在某处,但我不知道此信息是否可从 Java Socket 获得。

提前致谢。

【问题讨论】:

    标签: java sockets networking tcp


    【解决方案1】:

    不,您无法在 Java 中知道这一点,并且能够看到最后确认的 tcp 消息也无济于事,因为您写入套接字的内容可以在一个或多个消息/包中发送。

    您需要实现一个应用程序协议,接收方发送 ack。

    【讨论】:

    • 那很不方便。最后确认的字节有什么问题?如果我监视通过流发送的数据并且我知道最后确认的字节,我知道数据已经到达(独立于所需的数据包数量)。实现应用程序协议会增加太多开销,不幸的是,我的应用程序负担不起。
    • 嗯?无法实现应用协议?你送什么?从未见过有人在没有应用协议的情况下发送数据,即使它是一个简单的协议。
    • ack 可以是一条短消息,例如“OK #bytes 收到”。
    • 顺便说一句,我无法在 POSIX 套接字 API 中找到使用 TCP 套接字在幕后传输的最后一个数据包的 ID。 TCP 故意向您隐藏该信息……
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多