[英]java.net.Socket don't throw IOException at Android
我所做的 :
在Android Mobile上使用java.net.Socket編寫上傳程序
我想要的是:
連接服務器,當發生IOException(例如網絡狀態錯誤,無網絡等)時,請嘗試連接服務器三遍
什么問題:
關閉WIFI或移動GPRS並運行它,沒有IOexception發生,APP長時間就此停止了。
只看我的代碼:
try { do { socket = new Socket(); SocketAddress socketAddress = new InetSocketAddress(API.UPLOAD_SERVER, API.UPLOAD_PORT); socket.setPerformancePreferences(1, 0,0); socket.setSoTimeout(1000); socket.connect(socketAddress, 2000); attempt = 3; } while (attempt < 3); mListener.onStart(); } catch (SocketException e) { Log.e("UploadTask","exception"); return; } catch (UnknownHostException e) { return; } catch (IOException ioe) { try { Thread.sleep(100); } catch (InterruptedException e) { return ; } attempt++; if (attempt == 3) { return; } }
幫我還是...:希望有人可以幫助我,我將在線等待您的回答,謝謝。
如果您關閉WIFI或GPRS,則沒有任何輸出或異常。 這是否意味着您的應用程序將運行或您的代碼將停留在一個句子中,例如“ connect”方法?
我有個建議。 如果您想探索android的API,那就可以了。 要么
也許您可以在套接字連接之前測試連通性。
private boolean isOpenNetwork() {
ConnectivityManager connManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
if(connManager.getActiveNetworkInfo() != null) {
return connManager.getActiveNetworkInfo().isAvailable();
}
return false;
}
希望這可以幫助..
PS:我不知道直接解決您的問題,因為我不知道套接字實現細節。 也許其他人可以解釋它。
假設“ connect”方法成功(可能發生),則以實際讀取/寫入套接字流的方式獲得IOException的方式構建API。
socket = new Socket();
SocketAddress socketAddress = new InetSocketAddress(API.UPLOAD_SERVER, API.UPLOAD_PORT);
socket.setPerformancePreferences(1, 0,0);
socket.setSoTimeout(1000);
socket.connect(socketAddress, 2000);
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
// Now for example, if you want to read some data
int data;
try( data = is.read() ){
// Usual processing
} catch( IOException ){
// Disconnected... try reconnecting etc.
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.