java - 如何使用后台线程检查套接字是否已连接

标签 java android sockets

我正在开发应用程序,在其中在套接字上读写之前检查端口的可用性。我正在使用以下代码来检查状态

private boolean isAvailable(String host, int port) {
        try {
            Socket socket = new Socket();
            socket.connect(new InetSocketAddress(host, port), 1000);
            isPortAvailable = socket.isConnected();
        } catch (IOException e) {
            isPortAvailable = false;
        }
        return isPortAvailable;
    }

此后,我在 onClick() 上检查此状态

if (isAvailable(ip, Integer.parseInt(portLVR))) {
    startActivity(new Intent(getApplicationContext(),ActivityLivingRoom.class));
} else
    Toast.makeText(getApplicationContext(),"Connection Error !", Toast.LENGTH_SHORT).show();

但我的问题是,如果我在主线程上检查此状态,那么 android 会给我 networkonMainThradException 那么我如何使用后台线程管理此操作?

最佳答案

试试这个

 private class SocketCheckTask extends AsyncTask<String , Integer , Boolean> {
       String classname="";
     public SocketCheckTask (String classname) {
              this.classname=classname;
    } 
@Override
protected Boolean doInBackground(String... params) {
    return isAvailable(params[0], Integer.parseInt(params[1]);
  }

@Override
protected void onPostExecute(Boolean isAvailable) {
   if (isAvailable)) {
     Class c=Class.forName("yourpackage"+classname);
startActivity(new Intent(getApplicationContext(),c));
     } else
Toast.makeText(getApplicationContext(),"Connection Error !", Toast.LENGTH_SHORT).show();
     }
}

然后像这样发送

 SocketCheckTask task=new SocketCheckTask ("ActivityLivingRoom");
task.execute(ipadress,port);

关于java - 如何使用后台线程检查套接字是否已连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15630116/

相关文章:

android - 在 Android 中结束通话

java - Eclipse包名以com开头

java - 允许 Spring 在不同的 jars 中有多个 WebMvcConfigurer 实现

java - 如何通过读取 JSON 来修复 UnrecognizedPropertyException?

android - 如何通过 AsyncTask 正确使用 Intent 和 Uri 数据

android - ClassCastException:无法转换为 android.app.Activity

Linux:如何更改进程可以打开的最大文件数?

javascript - Node.js dgram 绑定(bind)在 udp6 和 udp4 上抛出 EADDRINUSE

ssl - 什么是套接字库?

java - 操作系统终端和 IntelliJ 终端之间的差异