2013-10-16 55 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无法访问。 –