【发布时间】:2023-03-07 06:15:01
【问题描述】:
我想检查一个端口是否打开,或者是否有服务器在其上运行。
我已经尝试过多种方式,例如“/system/bin/ping”和“InetAdress”,但如果我是对的,我无法使用这些 ping 指定端口:/
这次我是用 DatagramSockets 这样的想法实现的:
try { String messageStr="Hello!";
int server_port = 25565;
DatagramSocket s = new DatagramSocket();
InetAddress local = InetAddress.getByName("11.11.11.11");
int msg_length=messageStr.length();
byte[] message = messageStr.getBytes();
DatagramPacket p = new DatagramPacket(message, msg_length,local,server_port);
textView1.setText("Inet");
s.send(p);
textView1.setText("Send");
} catch (Exception e) {}
我收到“Inet”,但没有“发送”消息,所以我在发送时卡住了。我试图获取异常消息,它是 NetworkOnMainThreadException..
【问题讨论】:
-
请澄清:您的意思是在本地机器上还是在远程机器上打开端口?
-
没错,我想通过安卓手机检查服务器端口是否打开。
-
虽然与问题并不真正相关(它可能会导致有效答案的问题,但会因 UI 访问冲突而崩溃),但您不能在线程中使用
textView1.setText(...)。 UI 对象只能由创建它们的线程访问,该线程始终是主线程。您将不得不使用runOnUiThread并将Runnable传递给它,并在它的run()方法中覆盖执行您的 UI 代码 -
好吧,我猜我应该使用 AsyncTask,但我不知道我的项目是如何进行的。如果有人能给我一个代码,我会很高兴。