Java connect()方法忽略其超时值

Java connect()方法忽略其超时值,java,android,sockets,Java,Android,Sockets,我正在为Android开发一个应用程序,它需要通过TCP套接字连接发送消息。我已经按照connect(SocketAddress端点,int-timeout)方法设置了超时值。现在,connect()方法阻塞,直到超时过期,并且只有在服务器脱机时才会抛出SocketException。在所有其他情况下,如网络禁用、网络不可访问等,超时值被忽略,该方法直接抛出SocketException(enetunich)。如何确保超时即使在这种情况下也能正常工作?如果需要,将提供附加信息 谢谢连接超时适用于

我正在为Android开发一个应用程序,它需要通过TCP套接字连接发送消息。我已经按照
connect(SocketAddress端点,int-timeout)
方法设置了超时值。现在,
connect()
方法阻塞,直到超时过期,并且只有在服务器脱机时才会抛出
SocketException
。在所有其他情况下,如网络禁用、网络不可访问等,超时值被忽略,该方法直接抛出
SocketException(enetunich)
。如何确保超时即使在这种情况下也能正常工作?如果需要,将提供附加信息


谢谢

连接超时适用于远程服务器没有响应的情况。在其他情况下,超时不适用;e、 g

  • 当连接成功时
  • 当远程服务器拒绝连接时
  • 当网络层说“没有到主机的路由”时
  • 当网络层说“没有到网络的路由”/“网络不可访问”时

在这些情况下,连接尝试会立即成功或失败。如果您想继续尝试,您需要将connect调用封装在一些代码中,以便在出现可重试的失败时重试。(由您编写代码来决定重试的频率和停止的时间,以避免浪费网络资源、电池电量等。)

连接超时适用于远程服务器没有响应的情况。在其他情况下,超时不适用;e、 g

  • 当连接成功时
  • 当远程服务器拒绝连接时
  • 当网络层说“没有到主机的路由”时
  • 当网络层说“没有到网络的路由”/“网络不可访问”时

在这些情况下,连接尝试会立即成功或失败。如果您想继续尝试,您需要将connect调用封装在一些代码中,以便在出现可重试的失败时重试。(由您编写代码来决定重试的频率以及何时停止,以避免浪费网络资源、电池电量等。)

这是该方法的预期行为。超时仅在建立连接需要时间时才相关。如果确定由于其他原因无法建立连接,将立即抛出错误,而不会浪费时间。这就是该方法的内部实现方式。

这是该方法的预期行为。超时仅在建立连接需要时间时才相关。如果确定由于其他原因无法建立连接,将立即抛出错误,而不会浪费时间。这就是该方法在内部的实现方式。

当GPRS仍在准备连接时抛出network unreachable当GPRS仍在准备连接+1时抛出network unreachable。您应该进一步注意,timeout参数只能用于减少平台超时,而不是增加平台超时,并且默认值不是无穷大,与Javadoc.+1相反。您应该进一步注意,timeout参数只能用于减少平台超时,而不是增加平台超时,并且默认值不是无穷大,与Javadoc相反。