Java套接字失败

时间:2013-10-16 11:21:13

标签: java android sockets client

    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();

我的安卓代码就是这个。如果有任何问题,我需要将字符串保存在文件中(没有互联网连接,没有服务器可用,ecc ...我尝试使用try-catch,但即使没有可用的互联网/服务器,也没有例外扔了。你能救我吗?

2 个答案:

答案 0 :(得分:0)

如果您尝试在没有网络可用的情况下使用InetAddress.getByName(host)解析主机名,则很难相信代码不会抛出IOException或UnknownHostException。也许你可以发布更多的代码(使用try-catch-block)。

另外我建议您尝试使用DataOutputStream将字符串写入套接字:

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

此外,我建议您通过在Android中听取适当的广播或询问连接管理员来检查您的互联网连接的可用性。

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

答案 1 :(得分:-1)

您可以使用此方法InetAddress.isReachable来检查您是否可以ping主机。没有直接的方法来检查互联网连接

用法(没有尝试/捕获) -

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