Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > Пингующий мидлет |
Автор: ovod 14.6.2004, 01:18 |
Есть ли пример простейшего ping.java с использованием токма javax.microedition.io.* ? |
Автор: AntonSaburov 15.6.2004, 12:12 |
Насколько я помню ICMP в JAVA не поддерживается - а потому возможности сделать полноценный PING не получается. Был когда-то примерчик несколько исскуственного пинга - использовать еще какой-то порт. |
Автор: ovod 15.6.2004, 19:51 |
...Хмм.. я задал этот вопрос, потому что в программке для мобилы! NetTools v.0.2 (брать здесь http://download.siemens-club.ru:8000/files/java/nt.rar) намечен и ping, и whoIs и tracert, но самое главное - там действующий SSH-клиент! Ковырять исходники можно чудным декомпилятором djdec377 (брать здесь http://www.simtel.net/product.download.php?id=60196&url=ftp%3A%2F%2Fftp.chg.ru%2Fpub%2Fsimtelnet%2Fwin95%2Fjava%2Fdjdec377.zip&mirrorsite=Russia&x=0&SiteID=simtel.net) В J2SE конешно есть пакет java.net (которого нету в j2ME ![]() С большой радостью также приму ссылку на реализцию пинга через порт. |
Автор: AntonSaburov 16.6.2004, 11:39 | ||
Так это работает уже на уровне TCP. А ping существует на том же уровне, но ICMP. И его на JAVA не сделать. То, что гугль выдает кучу ping.java - так это скорее всего надстройка над JNI. А реальный код на Си написан. А вот примерчик "якобы" ping http://www.3dcom.com/ping/Pinger.html |
Автор: Sun 16.6.2004, 17:26 |
Пинг наверно можно без труда написать на чистой Java. По идее надо открыть UDP сокет и отсылать на него ICMP-пакеты, которые можно тоже формировать через Java. Пинг построен по принципу эхо-сервера, ты посылаешь датаграмму а сервер возвращает ее тебе. Описание ICMP можно посмотреть тут: http://www.school.ioffe.ru/lessons/courses/tcpip/icmp.html |
Автор: AntonSaburov 16.6.2004, 19:18 | ||
Так UDP-заголовок сформировать у тебя не получится - не тот уровень. Или есть идеи ? Я просто как-то раз занимался этим вопросом. И мне пришлось делать свой ping через JNI. Но если что-то может получится - было бы интересно. |
Автор: Nobody 16.6.2004, 23:56 |
Анриал. На Яве такой низкоуровневый код писать нельзя. |
Автор: ovod 17.6.2004, 00:18 |
Ситуация такая: 1) Если "выплевывать" сформированный "вручную" ICMP-пакет c type 8 через UDP-сокет (хотя тут вопрос: при организации сокета можно ли не указывать порт доставки? ), то нужно как-то все равно ловить ICMP ехо-пакет c type 0. Куда ж все-тки пингуемый отвечает, ведь не на порт? Как мы поймаем? 2) либо же UDP-пакет на неиспользуемый порт, и тогда пингуемый опять же ответит ICMP-пакетом с type 3. Вопрос опять не снимается. 3) либо же на пингуемом хосте должен быть запущен ехо-порт, например 7, который нам ответит UDP-пакетом, но не всяком компе этот ехо-порт запущен. 4) либо же делать косвенный пинг, посылая команду "сделать пинг" некоторому промежут. серверу и получая отчет по TCP. Правильно ли я рассуждаю? Поправьте. RFCы читал, но по англицки тяжело, 5% понимания. |
Автор: AntonSaburov 17.6.2004, 11:20 |
Мда-а-а. Есть идея - хостинг пингов ![]() Т.е. сервер занимается тем, что по TCP принимает запросы на пингование и отсылает результаты пинга. Вообщем пункт 4 занятен. |
Автор: Nobody 17.6.2004, 17:58 |
AntonSaburov Хех)) да, конечно, это было бы неплохо, только надо что-то делать, чтобы не заDOSили... Добавлено @ 18:01 В принципе, идея действительно хорошая, можно бы и сделать ![]() |
Автор: Sun 17.6.2004, 18:56 |
Да уж, на чистой Java ping не сделать так как она не поддерживает сырые (RAW) сокеты. Я тут дискусси на форуме почитал, насколько я понял решение так и не найдено http://forum.java.sun.com/thread.jsp?thread=453788&forum=31&message=2519662 |
Автор: ovod 21.6.2004, 19:00 |
Можно ли импортировать функции из WS2_32.dll в Java-приложение? Ваще импорт возможен из внешних библиотек? Например? |
Автор: Domestic Cat 21.6.2004, 19:10 |
Возможен - JNI http://www.codeguru.com/java/tij/tij0191.shtml |
Автор: AntonSaburov 21.6.2004, 19:16 |
Еще в JAVA 1.5 есть InetAddress.isReachable() |