从流中读取时出现SocketTimeoutException

时间:2016-04-19 10:25:29

标签: java sockets

我有Socket流,即使没有可用的数据,我也需要使用流功能中的in.read()

我需要这种方法,因为如果套接字断开连接,阻塞read函数会引发异常,这是了解套接字是否存活的唯一方法。

我发现in.read()正在等待大约2分钟的数据。如果没有可用的数据,则引发SocketTimeoutException

我可以以某种方式设置从套接字超时值读取吗?

2 个答案:

答案 0 :(得分:-1)

您可以使用Socket的KeepAlive()函数,如下所示:

s = new Socket(serverIP, portOut);
s.setKeepAlive(true);

这将导致套接字(显然)保持活动状态并且不会超时。

您还可以通过以下方式增加超时参数:

s.setSoTimeout(time_in_milliseconds);

答案 1 :(得分:-1)

只需使用以下命令在Java Socket上设置SO_TIMEOUT:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    //Magic one-liner
    IQKeyboardManager.sharedManager().enable = true

    return true
}

超时时间以毫秒为单位

如果将此选项设置为非零超时,则与此Socket关联的InputStream上的read()调用将仅阻止这段时间。在Expiry上,引发SocketTimeoutException。