簡體   English   中英

java.net.Socket不要在Android上拋出IOException

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM