Closed SKART1 closed 10 years ago
Пока выкачиваются зависимости, напишу, что вот эти строки:
while ((line = buf.readLine()) != null) {
line = new String(buf.readLine().getBytes(), Charset.forName("CP866"));
приводят к чтению строки дважды, в результате в парсер передаётся только каждая вторая строка.
Глазастый) Ты старую версию скачал - уже исправлено)) Выкачивай testBranch
Так я потому и закомментил тогда строку с кодировкой!
Смог выкачать последнюю версию?
Да, я скачал, вот разбираюсь. Зачем вообще отдельная функция tracerouteDestination
? Это же должно быть в начале функции getTracerouteAnswerString
.
Нет. Одна функция запускает трейсинг, другая читает построчно результат из буфера. Они выполняются считай параллельно
Ладно. Не возражаешь, если я сделаю parse
и getTracerouteCommand
приватными?
Делай что считаешь нужным, я же немогу каждую строку одобрять
Проблема ещё до парсера, потому что в него попадает только первая строчка (которая пустая, если выполнять в винде), а дальше ничего не происходит.
Что значит ничего не происходит? Попробуй сделай tracert 127.0.0.1 - у меня он выдал !!7!! одинаковых строк в результате
Напиши код, как именно ты его использовал.
1). Зашёл на localhost:8182 2). Ввёл 127.0.0.1 3). Нажал кнопку "start'
В программе поставил бряк на tracerouteDestination
А то, что на ветке TestWork главный проект не собирается это нормально?
У меня всё собирается. Лог в студию. Телепатов нет.
Ладно, не важно. Он не может собрать документацию, но если до этого доходит, значит исходники собираются. Я сделал то же самое, как ты написал, но после ввода IP ничего не происходит ни на страничке в браузере, ни в логе нетбинса.
Brekpoint поставь в MyWebSocketHandler в
@OnWebSocketMessage
public void onText(String msg) {
А в каком файле у тебя брейкпоинт на tracerouteDestination ?
Дима а поиском никак не воспользоваться? Я не могу по КАЖДОМУ вопросу консультировать.
У меня это не работает. И не понятно, с чего ты взял, что проблемы с парсингом. parse
в любом случае возвращает только один TracerouteItem, а не 7, в этом я уверен.
Что ты подразумеваешь под "не работает"? Я запускал парсер. Парсит он не корректно. Задача исправить. Значит сиди и разбирайся. Читай логи нетбинса. Знакомся с исходниками. Эксперементируй пока не разберешься
То, что я написал вчера: запускаю сервер, открываю localhost:8182 в браузере, ввожу IP, нажимаю поиск, появляется всплывающее окно, я подтверждаю, и дальше ничего не происходит. Так вот теперь объясни, как ты запускаешь именно парсер, и что там некорректно. Пока я этого не знаю, я не могу ничего исправить. Когда я тестировал парсер в отдельности от проекта, всё было корректно.
Ты должен поставить breakpoint в обработчиках сокетов. Запускать проект в режиме дебага.
breakpoint я поставил. В режиме дебага то же самое.
Значит что то не так делаешь.
Делаю так, как ты сказал.
Нет не делаешь,потому что у меня все работает.
Мне эти пререкания надоели. Не можешь запустить программу на отладку после 3 месяцев её напмсания -это очень печально.
И вообще у меня нет ни желания не возможности часами консультировать по малейшим чихам программы. Разберись сам наконец-таки.
Хватит мне хамить.
@dm-kiselev, на сайт пока не смотри - корректное отображение будет позже, когда доделаем отправку на клиент. Сейчас при пуске на клиенте формируется запрос и отправляется на сервер. В это время сервер выполняет трассировку и в результате (тестировали на 127.0.0.1, он же локалхост) получали 7 раз одно и то же. Если я сейчас беру и выполняю руками команду tracert 127.0.0.1, в результате я вижу только одну строку с IP. Почему на выход появляется 7 одинаковых IP - это "вопрос дня". Если выдаётся 7 раз только на локалхосте, я боюсь предположить что может быть на других IP. Поэтому ошибка достаточно критичная.
Попробовал, Всё работает. Пробовал с IP Яндекса (213.180.193.1). По началу и правда постоянно получаем из парсера IP 127.0.0.1, причём n-ое кол-во раз, но через некоторое время всё встаёт на круги своя и нужные IP согласно tracert выдаются.
Заметил, что во время обработки строк tracert бывают строки строго пустые. И для них parse возвращает IP Null, но дальше по этому значению идёт запрос к координатам. Запрос идёт потому, что методу TracerouteItemObject.haveAnyIP() на 118 строке MyWebSocketHandler.java не удается определить что IP NULL. и мы потому уходим по ветке else. Что-то не так с методом getHostAddress() он, наверняка не на то смотрит и не то возвращает.
if (address.getHostAddress() == null)
{
return false;
}
else
{
return true;
}
@GimAndMed попробуй взглянуть на этот метод - может удастся исправить
Суть в том, что когда в переменную типа InetAddress (объявлена в классе TracerouteItem)
public class TracerouteItem {
/*
* The IP address для этого хопа.
*/
private InetAddress address;
записывается null или вообще ничего не присвоено как здесь (101 строчка MyWebSocketHandler):
TracerouteItem TracerouteItemObject;
в ней хранится IP localhost он же 127.0.0.1.
Следовательно, при разборе tracert, когда у нас пустая строчка, или IP в строке не найдено в методе parse мы возвращаем объект
String hostname = null, IP = null;
...что-то парсится...
return new TracerouteItem(hostname, IP);
где IP null, то есть там с этого момента сидит 127.0.0.1.
это просто обработать изменив метод haveAnyIP() в классе TracerouteItem.
public boolean haveAnyIP(){
if (address.getHostAddress().contentEquals("127.0.0.1")) //проверка равенства строк
{
return false;
}
else
{
return true;
}
}
Это грубый вариант
Чего добился: (строка 116 в файле MyWebSocketHandler)
else if( TracerouteItemObject.haveAnyIP()){
срабатывает корректнее, когда IP не найден в строке или найден в качестве IP localhost.
Если посмотреть лог tracert на моей машине,
1
2 Трассировка маршрута к 123-ПК [127.0.0.1]
3 с максимальным числом прыжков 30:
4
5 1 <1 мс <1 мс <1 мс 123-ПК [127.0.0.1]
6
7 Трассировка завершена.
То это всего около 7 строчек, если считать с первой пустой. А так как я выше сказал, что пустые строчки и строчки где IP парсером не найден рассматриваются как null, то значит 127.0.0.1 повторяется около 7 раз.
А вообще парсер прекрасен:
работа парсера
IP from index.html:
93.158.134.3
***192.168.0.1
***10.24.24.1
***192.168.249.185
***192.168.249.133
***192.168.254.153
***188.134.127.81
***188.134.126.201
***188.134.126.237
***188.134.124.2
***193.232.244.93
***87.250.239.75
***87.250.239.97
***93.158.134.3
И tracert:
C:\Users\AndrewMendrew>tracert 93.158.134.3
Трассировка маршрута к www.yandex.ru [93.158.134.3]
с максимальным числом прыжков 30:
1 57 ms <1 мс 1 ms Dlink-Router.Dlink [192.168.0.1]
2 6 ms 7 ms 3 ms 10.24.24.1
3 6 ms 3 ms 8 ms 192.168.249.185
4 1 ms 3 ms 3 ms 192.168.249.133
5 5 ms 3 ms 3 ms gw64.zet [192.168.254.153]
6 5 ms 3 ms 4 ms cdac0-6.interzet.ru [188.134.127.81]
7 4 ms 5 ms 7 ms 188.134.126.201
8 5 ms 3 ms 3 ms 188.134.126.237
9 14 ms 15 ms 11 ms 188.134.124.2
10 13 ms 15 ms 15 ms msk-ix-m9.yandex.net [193.232.244.93]
11 * * * Превышен интервал ожидания для запроса.
12 49 ms 19 ms 15 ms ugr-p1-be1.yndx.net [87.250.239.79]
13 18 ms 17 ms 17 ms ugr-b-c1-ae5-0.yndx.net [87.250.239.97]
14 15 ms 15 ms 15 ms www.yandex.ru [93.158.134.3]
Трассировка завершена.
@GimAndMed МОЛОДЕЦ!!! :+1:
@GimAndMed круто! Так закрывай тогда проблему
@dm-kiselev проблемы с парсингом. Предлагаю следующий способ отладки 1). Открывай cmd/terminal (лучше cmd) 2). Вводи tracert 93.158.134.3 3). Сверяйся чтобы парсились строчки ответы, но не служебная информаия типа: "Трассировка маршрута к www.yandex.ru [93.158.134.3] с максимальным числом прыжков 30:"
4). Вот шаблон ответа для windows Как видишь корректных строках есть 3 цифры и только потом 1 2 ms <1 мс <1 мс 192.168.1.1 2 <1 мс <1 мс 1 ms 10.50.9.100 3 1 ms <1 мс <1 мс bgp1.unet.ws [91.192.191.145] 4 <1 мс <1 мс <1 мс bgp7.unet.ws [91.192.191.147] 5 1 ms 1 ms 1 ms aurora-vlan601.yndx.net [213.180.213.129] 6 1 ms 1 ms 1 ms ochakov-xe-0-0-0-601.yndx.net [213.180.213.134]
7 * * * Превышен интервал ожидания для запроса. 8 10 ms 9 ms 9 ms ugr-b-c1-ae5-0.yndx.net [87.250.239.97] 9 9 ms 9 ms 9 ms ugr-b-c1-ae4-0.yndx.net [87.250.239.75] 10 9 ms 9 ms 9 ms www.yandex.ru [93.158.134.3]
Какая-либо фильтрация локальных адресов не нужна.
Строчки с звездочками - заполняй нулями (собственно как сейчас и работает) * * *
Срок сдачи - среда 18.12.2013 22:00. По ознакомлению отписаться в формате: Ознакомлен, согласен/несогласен.