如何从TCP访问有关网络的信息?

问题描述 投票:-1回答:1

我正在用Java编写应用程序层协议。它基本上只是传输文件。如果传输无法完成或客户端与服务器之间的连接中断,我希望它生成错误消息。

是否有办法从TCP获取有关连接或传输状态的信息?还是我需要依靠我在应用程序层上的工作?如果我可以从TCP访问信息,怎么办?

java tcp ftp network-protocols application-layer
1个回答
0
投票

TCP不知道传输的“状态”。那是应用协议问题,而不是传输层问题。

关于TCP连接的状态,无法直接查询。而是在尝试读取或写入数据时查明状态。 read(...)或`write(...)的结果提供有关连接状态的一些信息。

  • 如果readwrite调用指示已读取或写入了非零字节数,则该连接可能处于活动状态。

  • 如果返回零字节的read指示另一端已关闭其连接的写侧。但是,我们无法确定是远程应用程序执行了此操作,还是远程操作系统执行了此操作,还是网络中的某个操作引发了关闭。

  • 如果readwrite引发异常,则可以推断出发生了问题,并且连接不再可行。在这种情况下可能出现的异常包括:

    • SocketException-典型的消息“连接重置”或“管道断开”,这通常意味着遥控器进行了意外操作,或者“套接字关闭”,这意味着应用程序已尝试在该连接上进行读写已关闭。SocketTimeoutException-通常,如果read花费的时间超过为套接字配置的读取超时,则会发生这种情况。不幸的是,它不能告诉您有关超时的基础
    • cause
    • 的任何信息。ProtocolException-从理论上讲,这对于套接字I / O操作是可行的,但是此异常通常由应用程序协议代码引发。

  • 不幸的是,这很难向您的应用程序用户提供有关传输失败原因的清晰准确的信息。但这是网络连接所固有的。真正的问题是简单/清晰的诊断信息不能直接使用

    anywhere

© www.soinside.com 2019 - 2024. All rights reserved.