Как пинговать IP через сокет и отправлять через него данные?
Как я могу пропинговать IP-адрес с помощью программы сокетов и отправлять через нее данные?
3 ответа
Вы не можете выполнить ping в Java - ping работает на уровне ICMP, который работает поверх IP, тогда как Java предлагает поддержку UDP (который находится поверх IP) и TCP (снова поверх IP). Это в основном другой (более высокий уровень) протокол, для которого вам понадобится ваша собственная (нативная) библиотека, написанная для получения доступа к стеку IP.
Ping - это определенный протокол ICMP. Вы не можете отправлять ICMP-пакеты на чистой Java.
Однако вы можете открыть сокет TCP для определенного порта и отправить ему некоторые данные. Есть миллионы примеров учебных пособий о том, как это сделать.
Я предлагаю вам взглянуть на эти
http://www.google.co.uk/search?q=java+socket+tutorial 6 миллионов результатов
http://www.google.co.uk/search?q=java+socket+example 11,6 миллиона результатов.
Чтобы отправить только одного персонажа, вы можете сделать
Socket s = new Socket(hostname, port);
s.getOutputStream().write((byte) '\n');
int ch = s.getInputStream().read();
s.close();
if (ch == '\n') // its all good.
Пинг использует протокол ICMP, который недоступен в Java. Это может быть лучший способ проверить связь с сервером в Java:
try{
String s = null;
List<String> commands = new ArrayList<String>();
commands.add("ping");
commands.add("192.168.2.154");
ProcessBuilder processbuilder = new ProcessBuilder(commands);
Process process = processbuilder.start();
BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
System.out.println("Here is the standard output of the command:\n");
while ((s = stdInput.readLine()) != null)
{
System.out.println(s);
}
}catch (Exception e) {
System.out.println("This is sad ");
}
Также другим способом может быть работа с чистыми Java-сокетами.