我有Socket流,即使没有可用的数据,我也需要使用流功能中的in.read()
。
我需要这种方法,因为如果套接字断开连接,阻塞read
函数会引发异常,这是了解套接字是否存活的唯一方法。
我发现in.read()
正在等待大约2分钟的数据。如果没有可用的数据,则引发SocketTimeoutException
。
我可以以某种方式设置从套接字超时值读取吗?
答案 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。