package com.example.fuck;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.net.InetAddress;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private EditText et_host_name_this;
private TextView tv_hos_name_this;
private Button btn_host_name_this;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
public void initView(){
et_host_name_this = (EditText) findViewById(R.id.et_host_name);
tv_hos_name_this = (TextView) findViewById(R.id.tv_host_name);
btn_host_name_this = (Button) findViewById(R.id.btn_host_name);
btn_host_name_this.setOnClickListener(this::onClick);
}
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg){
tv_hos_name_this.setText("主机检查结果如下:\n"+msg.obj);
}
};
public void onClick(View v){
if(v.getId()==R.id.btn_host_name){
new CheckThread(et_host_name_this.getText().toString()).start();
}
}
private class CheckThread extends Thread{
private String mHostName;
public CheckThread(String host_name){
mHostName = host_name;
Log.i("host_name",host_name);
}
@Override
public void run(){
Log.i("host_name","1");
Message message = Message.obtain();
Log.i("host_name","2");
try {
InetAddress host = InetAddress.getByName(mHostName);
boolean isReachable = host.isReachable(5000);
String desc = (isReachable)?"可以连接":"无法连接";
if(isReachable==true){
desc = String.format("%s\n主机名为%s\n主机地址为%s",desc,host.getHostName(),host.getHostAddress());
}
message.what=0;
message.obj=desc;
}catch (Exception e){
e.printStackTrace();
message.what=-1;
message.obj=e.getMessage();
}
mHandler.sendMessage(message);
}
}
}
主要问题就是当输入如www.bai.com时,回耗尽等待时间,然后结果连接不成功,但是电脑可以ping通www.baidu.com,有没有好心人解答一下,android sutdio4.1,模拟器为Pixel3 API 28,Android9.0 x86。结果图如下:
只输入域名默认是http协议,端口是80,而百度其实是https协议,端口是443,这样当然连接不到了。
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
1. 排查下模拟器是否可以上网;
2. Java的isReachable 接口的问题,你可以搜索一下相关的问题(可以ping通,但isReachable 返回false),虽说Android 有改过这个接口,但是确实存在不可达的情况(涉及到用户权限问题)。例如
https://www.cnblogs.com/bug01/p/14011784.html
3. 如果你只是判断网络是否可用或指定服务器是否可用的话,建议采用http的方式(判断是否超时,不管404还是500之类状态码的都代表已经访问到目标服务器了,只是服务不可用而已)。因为部分网站或服务器会禁PING。