Я хотел бы проверить, открыт ли порт, или сервер работает на нем.
я уже пробовал несколькими способами, например, с «/ системы/бен/пинг» и «InetAdress», но если им права я не могу пинговать указанный порт с этим:/Проверьте, открыт ли порт на Android/Java
На этот раз я сделал это с идея 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) {}
я получаю «инет», но не сообщение «Отправить», поэтому я застреваю при отправке. Я попытался получить сообщение об исключении, и это NetworkOnMainThreadException.
Просьба пояснить: Вы имеете в виду, если порт открыт на локальном компьютере или на удаленной машине? –
Точно, я хочу проверить с телефона Android, если порт сервера открыт. – Caddaile
Хотя это действительно не актуально для вопроса (это может вызвать проблемы с действительными ответами, которые работают, но сбой при нарушении доступа к пользовательскому интерфейсу), вы не можете использовать 'textView1.setText (...)' из потока. Объекты пользовательского интерфейса могут быть доступны только тем потоком, который их создал, который всегда является основным потоком. Вам нужно будет использовать 'runOnUiThread' и передать ему« Runnable », а в его' run() 'переопределить метод выполнить ваш код пользовательского интерфейса – Tseng