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