2013-09-27 42 views
1

我一直在寫一個需要連接到TCP服務器的應用程序。 我一直試圖讓這部分代碼在無法連接到服務器端端口時發出某種異常。 我知道它無法連接,因爲我關閉了我的服務器並且端口被阻塞。如何獲取Android流式套接字連接上的超時異常?

這是我到目前爲止有:

public void run() 
{ 
    mRun = true; 
    try 
    { 
     InetAddress serverAddr = InetAddress.getByName(SERVERIP); 
     Socket socket = new Socket(serverAddr, SERVERPORT); 
     try 
     { 
      out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true); 
      in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 

....

在任何情況下,我的代碼最終被粘在新的Socket()構造函數,它不拋出任何IO異常。 到目前爲止,我已經試過

socket.setSoTimeout(timeout); 

但它並沒有區別。

關於我可以採取的行動的任何想法?

回答

1

SO_TIMEOUT設置僅影響從套接字讀取,而不是初始連接。您可以通過創建一個未連接的插座,然後使用connect方法允許timeout參數進行連接超時:

Socket socket = new Socket(); 
socket.connect(new InetSocketAddress(serverAddr, SERVERPORT), timeout); 
+0

這似乎是工作。不能相信我沒有注意到我可以做到這一點。 – Arnon

2

嘗試:

socket = new Socket(); 
socket.connect(new InetSocketAddress(serverIpAddress, serverPort), timeout); 
相關問題