2015-05-25 31 views
1

我正在Android上創建一個應用程序,該應用程序通過套接字連接到PC上的服務器。應用程序有一個主機列表,用戶按下他想要連接的那一刻。問題在於,如果他按下了當前未連接的主機(即服務器端程序未運行或機器關閉),則應用程序將凍結。我發現應用永遠停留在這行代碼sck = new Socket(ip, 8081);上。檢測套接字是否有錯誤的IP並且無法連接

有什麼方法可以在創建套接字之前檢查機器是否可以接受連接?或者從此產生一個錯誤?或以任何方式呢?

謝謝。

PS:UnknownHostException僅在IP寫入格式錯誤時引發,而不是如果無效。

回答

3

我檢測到應用程序停留在這行代碼上sck = new Socket(ip,8081);永遠。

不,它不。它會阻止平臺超時,這是大約一分鐘的時間。如果你的應用程序凍結它意味着你正在GUI線程而不是它自己的線程上執行此操作。您可以縮短超時如下:

Socket sck = new Socket(); 
sck.connect(new InetSocketAddress(ip, port), timeout); 

其中timeout以毫秒爲單位。請注意,儘管它在Javadoc中說了什麼,但無法將其增加到平臺默認值以外。零在這裏不是'無限',它是平臺默認的。

有沒有什麼辦法可以在創建套接字之前檢查機器是否可以接受連接?

你是指像預言未來?算命?

或者由此產生一個錯誤?

見上文。

或者任何方式嗎?

見上文。

+0

您剛剛保存了我的高級項目。非常感謝你!!! – LedZep

相關問題