[英]JAVA : When to use Socket setSoTimeout?
我正在制作一个应用程序,其中客户端将消息发送到服务器,然后等待5秒钟(假设),服务器响应,如果没有返回消息,它将再次重试。 如果服务器响应该消息,则客户端将对其进行处理。 这种情况不断循环,并在一段时间后再次发生。
为此,我当时正在考虑在Client Socket上使用setSoTimeout(time),但是在阅读了Javadoc和互联网上的很多解释之后,我对于这种方法是否正确感到困惑。
我在网路上阅读的内容
(1)如果我在套接字上使用setSoTimeout,则它给出需要建立连接的持续时间的超时,如果未建立,则会在给定时间内重试建立连接。
(2)如果我在套接字上使用setSoTimeout,则它将在指定的时间间隔内等待传入消息,如果没有收到消息,则它将停止等待。
我的问题是-
(1)以上哪一项是正确的?
(2)如果第二条陈述为真,那么我可以在实现中使用它吗?
(3)如果第二条陈述为真,那么超时定时器启动何时开始? 是在声明套接字并为其设置超时期限时还是在发送消息时?
如果两种解释均不适用于我的情况,那么我应该怎么做才能在客户端上等待固定的时间间隔以便服务器回复? 如果确实收到答复,我应该处理它,然后继续并重做相同的过程。 如果没有收到答复,我应该继续进行,然后重做整个过程。
(1)如果我在套接字上使用
setSoTimeout()
,那么它将给出需要建立连接的持续时间的超时,如果未建立,则会在给定时间内重试建立连接。
这是不正确的。 setSoTimeout()
根本不会导致重新建立连接,更不用说“在给定时间内”了。
(2)如果我在套接字上使用
setSoTimeout()
,则它将在指定的时间间隔内等待传入消息,如果没有收到消息,则它将停止等待。
这稍微更准确,但是在TCP中没有消息。
正确的解释是,它阻塞了指定的超时时间,至少有一个字节到达。 如果在超时时间内什么都没有到达,则抛出SocketTimeoutException
。
(1)以上哪一项是正确的?
都不行
(2)如果第二条陈述为真,那么我可以在执行中使用它吗?
它不是,因此第二部分不适用,但是如果有任何声明为真,则可以将其用作实现的一部分。 你不用问
(3)如果第二条语句为true,则超时计时器何时开始?
当您调用read()
。
是在我声明套接字并为其设置超时期限时还是在发送消息时?
都不行
如果两种解释均不适用于我的情况,那么我应该怎么做才能在客户端上等待固定的时间间隔以便服务器回复?
设置读取超时。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.