Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   узнать скорость инет соединения используя пинг (https://forum.antichat.xyz/showthread.php?t=211294)

PabloPicasso 13.06.2010 20:57

узнать скорость инет соединения используя пинг
 
Возможно ли узнать скорость инет соединения используя эхо запрос?
Если можно установить размер нагрузки ICMP пакета до 65 000 байт и замерять время прохождения ответа, будет ли это реальной скоростью подключения?

slesh 13.06.2010 21:18

не советовал бы так тестить. потому что ICMP мало надежный протокол, при этом он менее приоритетный и может фаером рубиться.
Вообще быстрее просто приконнектится к серваку и запросить страницу большую.

PabloPicasso 13.06.2010 21:26

я пробовал замерять момент между началом загрузки страницы и нулевым размером буфера через таймер в отдельном потоке
Код:

Procedure timer(it.l)
Repeat
Delay(1)
speedn.l = speedn.l + 1
Until speedn.l = 10000
EndProcedure

InternetReadFile_(hURL,@Buffer, Len(Buffer), @Bytes)
CreateThread(@timer(), 0)
If Bytes = 0
chk.d = Len(res)/speedn.l
Debug Str(chk.d)+" Kb/s"
EndIf

но результат очень странный, при скорости 4 Мбит/с выдало в 2 раза меньше
может дело в используемом сервере?
побывал грузить длинные манулы с ripn.net и соглашение с гугла :)

GhostOnline 13.06.2010 21:31

Цитата:

Procedure timer(it.l)
Repeat
Delay(1)
speedn.l = speedn.l + 1
Until speedn.l = 10000
EndProcedure
Если Delay это аналог Sleep то процедура твоя половину времени спит
ЗЫ Могу и ошибаться

PabloPicasso 13.06.2010 21:36

Цитата:

Сообщение от GhostOnline
Если Delay это аналог Sleep то процедура твоя половину времени спит
ЗЫ Могу и ошибаться

спит 1 мс в отдельном потоке а потом плюсует единицу в переменную, это для замера к-ва мсок с начала загрузки, код на PureBasic, я ток кусок привел, работает норм ;)

я думаю дело в сервере, гугл и рипн режут скорость в зависимости от того какую страницу запрашивает юзер, мне нужен сервер который дает минимум 10 Мбит/с на загрузку страниц

Faost 13.06.2010 21:41

А если возложить эту задачу на сервис типа 2ip.ru?

PabloPicasso 13.06.2010 21:43

Цитата:

Сообщение от Faost
А если возложить эту задачу на сервис типа 2ip.ru?

там каптча, да и изучать как оно работает нет времени

GhostOnline 13.06.2010 21:46

Цитата:

спит 1 мс в отдельном потоке а потом плюсует единицу в переменную, это для замера к-ва мсок с начала загрузки, код на PureBasic, я ток кусок привел, работает норм
Я тебе к тому, что твоя процедура может неправильно считать время
Я сделал тривиальный тест на дельфи:
Цитата:

var
old : Cardinal;
i :Integer;
begin
old := GetTickCount;
i := 0;
while i < 1000 do
begin
Sleep(1);
Inc(i);
end;
ShowMessage(IntToStr(GetTickCount - Old));
Все как у тебя: задержка, инкремент переменной
Так вот, в сообщении выдало 1953. Т.е. этот цикл выполнялся в два раза дольше чем должен был (по твоим рассуждениям)
Отсюда и у тебя неправильные результаты, типа скорость в 2 раза ниже.
PS Это предположение

PabloPicasso 13.06.2010 21:54

нет, все четко, 10 секунд в цикле на глаз 10 секунд

так понял что на делфи гдет лишнее время теряется
у мя четко 10 сек

GhostOnline 13.06.2010 21:57

Inc - обычный инкремент.
Т.е. увеличение целочисленной переменной на единицу
Тоже самое что и i := i +1;
Или те кто на бэйсике даже не знают что такое инкремент?
Цитата:

нет, все четко, 10 секунд в цикле на глаз 10 секунд

по твоему коду у тебя не может быть больше 1000 =)
Не пойму мне видео снять еще?
Зачем мне врать то

PS От твоего поста я еще больше убедился в своей правоте

Цитата:

если чет печатает в ГУИ то там нехилая задержка должна быть, хотя дела это не меняет, в коде i может быть от 0 до 1000
Сначала вычисляется GetTickCount - Old, и только потом в дело вступает ГУИ и выводит что уже было вычислено. Да и все равно, задержка не может быть такой большой
Цитата:

так понял что на делфи гдет лишнее время теряется у мя четко 10 сек
Код в студию! Видать ты неправильно время измерил.
Не забывай что во время выполнения процедуры происходит переключение контекста. Ты его не учитываешь, а ведь время то на него уходит

PabloPicasso 13.06.2010 22:02

Цитата:

Сообщение от GhostOnline
Inc - обычный инкремент.
Т.е. увеличение целочисленной переменной на единицу
Тоже самое что и i := i +1;
Или те кто на бэйсике даже не знают что такое инкремент?

Не пойму мне видео снять еще?
Зачем мне врать то

PS От твоего поста я еще больше убедился в своей правоте

пардон, не заметил замер GetTickCount :)
я знаю что такое инкремент, просто мой бейсик генерит ровный асм где я проверил что лишних задержек в потоке нет
Делфи теряет время на что-то, попробуй вынести в поток и будет четко 1000 в переменной и GetTickCount больше на тысячу ;)

PabloPicasso 13.06.2010 22:19

Цитата:

Сообщение от GhostOnline
пипепц, у меня переменная равна 1000 как и положено
Но времени проходит в 2 раза больше. Сам только что же признал это
А ты считаешь по переменной. А это неверно
Реального времени проходит больше. Смирись с этим

Ведь ты вроде считать должен по времени, а не по какой-то там своей переменной

да я знаю :D

далеко от темы

altblitz 13.06.2010 22:23

Цитата:

Сообщение от PabloPicasso
Возможно ли узнать скорость инет соединения используя эхо запрос?
Если можно установить размер нагрузки ICMP пакета до 65 000 байт и замерять время прохождения ответа, будет ли это реальной скоростью подключения?

нет, и вот почему.
при пинге, скорость будет в каждый раз зависеть от прохождения пинга через роутинги до ЯйПи.
и расхождение может быть разным - в разы отличатся.

PabloPicasso 13.06.2010 22:31

Цитата:

Сообщение от altblitz
нет, и вот почему.
при пинге, скорость будет в каждый раз зависеть от прохождения пинга через роутинги до ЯйПи.
и расхождение может быть разным - в разы отличатся.

спасибо за нормальный ответ :)

PabloPicasso 13.06.2010 22:34

Цитата:

Сообщение от GhostOnline
ТС, замерь сначала в перменную с помошью функции GetTickCount
Сделай запрос.
Вычти опять с помошью этой функции сколько времени прошло.
Даже таймер не нужен.

Delay() аналог Sleep() в винде

10 тысяч раз Sleep(1) в отдельном потоке = 10 секунд на наручных часах :D

100 тысяч раз = 101 секунда из за инкремента переменной

мне пох на эту погрешность ;)

PabloPicasso 13.06.2010 22:49

разобрался =)
создал на фри хосте пхп который генерит 10 Кб текста, замерял, четко 4 Мбит/с =)

mailbrush 13.06.2010 22:54

GhostOnline, ты хоть когда-нибудь слышал, что такое потоки? Код ТСа не спит, как твой, а работает в два потока - один таймер, другой замеряет скорость. У тебя же все идет постепенно в одном потоке, из-за чего у тебя он выполняется в два раза дольше.

По теме:

ТС, реальную скорость интернета, соединяясь с одним сервером, ты не вычислишь никак. Все сервисы онлайн-проверки - этому подтверждение. Допустим, ты написал программу, которая скачивает 10 мбайт абсолютно ненужной информации с твоего русского сервера. Я запустил её у себя на компе (2 мбита, к примеру) - скачал за 40 секунд. Открыл на компьютере с аналогичной скоростью, но в Зимбабве - в 3 раза дольше качал, хотя скорость та же. Улавливаешь? Тут роль играет отдаленность А от Б, где А - комп, измеряемый скорость, Б - сервер измерения.

А вообще, лучшими тестерами скорости являются p2p сети... Думаю, сам знаешь почему.

mal41k 14.06.2010 09:52

получилось замерять точную скорость через 20 обращений к URL
Код:

"http://www.google.com/search?hl=ru&site=&q="+Str(Random(100))
точность до 1 Кб/с но гуголь после нескольких таких тестов забанил, мол "your computer or network sending automated queries" :D
гугл просто идеален для замеров, у него сервера почти во всех странах, вот только ругается собака

вот пример: http://multi-up.com/289222

з.ы. эвристика может орать типо Malware, прост нету полезной нагрузки, ток InternetOpen InternetOpenUrl InternetReadFile :)

PabloPicasso 15.06.2010 19:54

Цитата:

Сообщение от mal41k
получилось замерять точную скорость через 20 обращений к URL
Код:

"http://www.google.com/search?hl=ru&site=&q="+Str(Random(100))
точность до 1 Кб/с но гуголь после нескольких таких тестов забанил, мол "your computer or network sending automated queries" :D
гугл просто идеален для замеров, у него сервера почти во всех странах, вот только ругается собака

вот пример: http://multi-up.com/289222

з.ы. эвристика может орать типо Malware, прост нету полезной нагрузки, ток InternetOpen InternetOpenUrl InternetReadFile :)

есть вариант изящней )


Время: 00:53