我嘗試通過在android上使用套接字與我的服務器連接。我希望它能像這樣工作;當我向服務器發送請求時,如果有響應,請調用我的響應函數。如果發生500毫秒的超時(將檢查異常和我設置的布爾值),我想執行另一個函數。但是使用這個代碼時,當我向服務器發送某些東西並等待響應時,如果有響應,它執行onServerResponse函數,並且在沒有響應時不執行任何操作(掛起)。如何編輯此代碼,以便在沒有響應時它會引發超時異常?Java讀取超時不起作用
boolean control = false;
try{
Socket socket = new Socket();
socket.setSoTimeout(500);
socket.connect(new InetSocketAddress(InetAddress.getByName(SERVER_IP),SERVER_PORT));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8"));
bw.write("asdasd\n");
bw.flush();
control = true;
int readInt = -1;
String read = null;
StringBuilder sb = new StringBuilder("");
while((readInt = socket.getInputStream().read()) != -1){
sb.append((char)readInt);
}
read = sb.toString();
if(read != null && read.trim().length() > 0){ onServerResponse(read); }
}catch(Exception e){ Log.v("Main", "GOT AN ERROR: "+e+control); }
問題解決了,請參閱評論回答。
沒有什麼錯,你已經發布的代碼,如果調用'閱讀()'塊500ms以上會拋出異常。這可能是連接嘗試是阻塞的。 –
嘿布賴恩,當我設置我的服務器發送響應,我通過onServerResponse接收響應,否則它只是掛在while((readInt = socket.getInputStream()。read())!= -1){並沒有拋出任何例外。 –
那麼我發現是什麼導致了我設置斷點後的問題。顯然系統不會掛起,它不會拋出任何異常或其他東西。想想我需要修改我的代碼才能使用它。不管怎麼說,多謝拉。 –