检测连接是否失败-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)