Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检测连接是否失败-Java Android_Java_Android_Sockets - Fatal编程技术网

检测连接是否失败-Java Android

检测连接是否失败-Java Android,java,android,sockets,Java,Android,Sockets,如何检查服务器是联机还是脱机,以及是否脱机,请在服务器打开之前开始连接。我试过这样做: connectBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new Thread(rConnection).start(); } }); public Runnab

如何检查服务器是联机还是脱机,以及是否脱机,请在服务器打开之前开始连接。我试过这样做:

        connectBtn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            new Thread(rConnection).start();

        }
    });

   public Runnable rConnection = new Runnable() {

    @Override
    public void run() { 
        boolean status = connect();         
        while (!status)
        {
            System.out.println("Connection Status: " + status);
            status = Connect();
        }
    }
 };

public boolean Connect() {

        boolean status = false;

        try {
            s = new Socket(SERVER_ADDRESS, TCP_SERVER_PORT);

            System.out.println("Socket: " + s.toString());

            if (s.toString() != "")
            {
                status = true;
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
            status = false;
            s=null;
        } catch (IOException e) {
            e.printStackTrace();
            status = false;
            s=null;
        } catch (NullPointerException e)
        {
            e.printStackTrace();
            status = false;
            s=null;
        }

        return status;
    }

若服务器在启动应用程序之前运行,它将成功连接,但若服务器关闭或在一段时间后断开连接,我不会收到任何错误消息,它也不会再次开始重新连接。如何解决此问题?

查看此线程以获得解决方案和关键字:。另外,如果基础连接丢失(或超时),请考虑重新尝试对新连接的请求。

基本上,您可以拆分如下:

s = new Socket(SERVER_ADDRESS, TCP_SERVER_PORT);
进入

然后控制连接是否在超时或连接成功时返回

如何检查服务器是联机还是脱机,以及是否脱机在服务器打开之前开始连接


在需要连接时尝试连接到它,并处理由此导致的故障。目前,你似乎试图保持一种永久的联系,这是永远不会起作用的。检测资源是否可用的最佳方法是在需要使用它的时候尝试使用它。任何东西都会受到许多错误来源的影响,比如时间窗问题、测试错误的东西、在错误的时间测试正确的东西,充其量就是过度使用稀缺资源。重新考虑您的要求。

这不是我想要的,因为服务器应用程序正在特定的端口和IP地址上运行。请尝试使用。这将导致更多的网络流量,但您可以立即重新启动连接(如果您有连接)。为什么
Socket.toString()
永远是空的
字符串?
InetSocketAddress socketAddress=new InetSocketAddress(服务器\地址,TCP \服务器\端口);s.connect(socketAddress,2000年);现在我得到空指针异常,即使服务器应用程序已启动并正在侦听?您知道为什么吗?
s
已定义(非空)?任何堆栈跟踪?除非
s
为null,否则该代码不会抛出
NullPointerException
。唯一的解释是您遗漏了代码的
=newsocket()
部分。对不起,我的错误。现在它起作用了。谢谢现在我面临着一个问题。若并没有任何错误,我需要停止检查连接,这样我就有了一个全局变量状态。你可以在我发布的代码中看到它。更改状态变量不会停止线程以检查连接。你能解释一下为什么吗?
s = new Socket();
s.connect(remoteAddr,timeout)