2013-10-16 56 views
0
Socket socket = null; 
    PrintWriter out =null; 
    InetAddress ip = InetAddress.getByName(host); 
    socket = new Socket(ip,port); 
    out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true); 
    out.println(myString); 
    if(socket!=null) 
     socket.close(); 

我的android代碼是這樣的。我需要將字符串保存在文件中,如果有任何問題(沒有互聯網連接,沒有服務器可用,ecc ...我嘗試用try-catch,但即使沒有互聯網/服務器可用,也不例外。被拋出你能幫我Java套接字故障

回答

0

很難相信如果您嘗試使用來解析主機名,代碼不會拋出IOException或UnknownHostException 10沒有網絡可用。也許你可以發佈更多的代碼(使用try-catch-block)。

此外,我建議你嘗試使用DataOutputStream類寫你的字符串到插座:

DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream()); 
dataOutputStream.writeUTF(myString); 

此外,我建議您無論是聆聽在Android上apropriate廣播檢查互聯網連接的可用性或者通過詢問連接管理器。

public static boolean isNetworkConnectionAvailable(Context context) { 

    boolean isNetworkConnectionAvailable = false; 

    ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService("connectivity"); 
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 

    if(activeNetworkInfo != null) 
    { 
     isNetworkConnectionAvailable = 
       activeNetworkInfo.getState() == NetworkInfo.State.CONNECTED; 
    } 
    return isNetworkConnectionAvailable; 
} 

或在這裏看到:broadcast-receiver-for-checking-internet-connection-in-android-app

+0

好吧,這樣我知道我是否連接,但如果我連接但服務器無法訪問,我需要將字符串保存在文件中。我看到'InetAddress.isReachable()'不可靠。 –

+0

解決您的問題並不是要依靠這樣一個事實,即某件事因爲沒有異常而被轉移到另一個主機。我強烈建議您從服務器向客戶端發回確認信息。如果在特定時間(讀取超時)後沒有這種確認,那麼您應該將該字符串寫入文件。也許查找關於協議設計的書籍。 – mwhs

-1

您可以使用此方法,InetAddress.isReachable,以檢查是否可以ping主機有沒有直接的方法來檢查網絡連接

使用(沒有的try/catch) - 。

if(ip.isReachable(3000)) // timeout is 3000 ms ie 3s 
    { 
      // internet available,do something 
    } 
+0

所以我只是在try-catch中使用該方法?我會盡力謝謝你。 –

+0

不需要嘗試捕獲,請參閱編輯。 –

+0

我試過了,但現在,即使服務器在線,我也無法連接到它(我在我的電腦中使用avd和服務器,所以如果我刪除連接如果工作正常)。所以我想如果我使用這樣的服務器,IP無法訪問。 –