如何在客户端套接字连接上设置超时?

问题描述:

我想在java中设置客户端套接字上的连接超时。我已将默认连接超时设置为2000,即:如何在客户端套接字连接上设置超时?

this.socket.connect(this.socketAdd, timeOut); 

这我正在尝试一个Web应用程序。当用户发出请求时,我将值传递给套接字服务器,但如果在5秒内没有收到任何响应,套接字应该断开连接。但在我的情况下,整个请求再次提交。任何人都可以告诉我我哪里错了?

我想削减套接字连接,如果我在5秒内没有得到任何回应。我该如何设置它?任何示例代码都会有帮助。

显示的是连接超时,如果在特定时间内无法连接,则超时。

你的问题意味着你想要一个超时时间,当你已经连接并发送一个请求,你想超时如果在一定的时间内没有响应。

假设你的意思是后者,那么你需要超时socket.read(),这可以通过SO_TIMEOUTSocket.setSoTimeout(int timeout)方法来完成。如果读取时间超过了指定的毫秒数,这将引发异常。例如:

this.socket.setSoTimeout(timeOut); 

的另一种方法是做读取在一个线程,然后等待一个超时的线程上,并关闭套接字,如果它timesout。

你甚至可以尝试:

Socket client=new Socket(); 
client.connect(new InetSocketAddress(hostip,port_num),connection_time_out); 
+2

这帮助我超时,当服务器不存在,或拒绝连接。 – anisbet 2013-06-06 16:00:44

+0

btw,'connection_time_out'是以毫秒为单位 – lightswitch05 2017-11-08 15:50:55

为了把整个事情:

Socket socket = new Socket(); 
// This limits the time allowed to establish a connection in the case 
// that the connection is refused or server doesn't exist. 
socket.connect(new InetSocketAddress(host, port), timeout); 
// This stops the request from dragging on after connection succeeds. 
socket.setSoTimeout(timeout);