2011-04-12 180 views
28

我想在java中設置客戶端套接字上的連接超時。我已將默認連接超時設置爲2000,即:如何在客戶端套接字連接上設置超時?

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

這我正在嘗試一個Web應用程序。當用戶發出請求時,我將值傳遞給套接字服務器,但如果在5秒內沒有收到任何響應,套接字應該斷開連接。但在我的情況下,整個請求再次提交。任何人都可以告訴我我哪裏錯了?

我想削減套接字連接,如果我在5秒內沒有得到任何迴應。我該如何設置它?任何示例代碼都會有幫助。

回答

16

顯示的是連接超時,如果在特定時間內無法連接,則超時。

你的問題意味着你想要一個超時時間,當你已經連接併發送一個請求,你想超時如果在一定的時間內沒有響應。

假設你的意思是後者,那麼你需要超時socket.read(),這可以通過SO_TIMEOUTSocket.setSoTimeout(int timeout)方法來完成。如果讀取時間超過了指定的毫秒數,這將引發異常。例如:

this.socket.setSoTimeout(timeOut); 

的另一種方法是做讀取在一個線程,然後等待一個超時的線程上,並關閉套接字,如果它timesout。

34

你甚至可以嘗試:

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

17

爲了把整個事情:

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); 
相關問題