Всем привет может кто знает как программно определить скорость инета ? сначала думал грузить файл в обе стороны но этот вариант не подходит . есть ли другие варианты ? заранее спасибо
А как иначе? По-любому придётся передавать данные на сервер и получать назад. Не устраивая передачу данных фактическую скорость определить невозможно. Только максимальную скорость подключения (вроде того как Windows пришет при подключении - 100 МБит/сек), но эти данные практически всегда далеки от реальности.
можно попробовать запросить у модема страничку 192.168.1.1 и пропарсить ответ, там есть upstream и downstream (как минимум в d-link'ах, в других не знаю).
Это скорость коннекта с провайдером, и не зависит от тарифа... Врятли есть варианты кроме как - скачать файл и изменить скорость, либо подождать пока юзер начнёт скачивать какой-нибудь файл, и посмотреть скорость загрузки. Но скорость скачивания произвольного файла редко равна скорости инета (сервер отдаёт медленнее, например).
эта скорость напрямую зависит от тарифа, и ограничивается провайдером. Переходишь на другой тариф - изменяются скорости. В прошлом месяце у меня был анлим, ограниченный только пропускной способностью линии, и downstream был 8148 кбит (настраивалось на устойчивый максимум в прямом эфире - при общении с оператором по телефону), в этом месяце перешёл на тариф 2 мегабита, downstream теперь 2043.
Отправка данных вообще ничего не дает. Скорость будет зависеть от конкретного сервера, с которым ведется обмен. У одного сервера скорость выше, у другого ниже, ориентироваться на это нельзя. Получим только скорость работы с данным конкретным сервером, а не скорость, которую позволяет интернет-соединение Ради примера: торренты канал позволял скачивать со скоростью 900 - 1000 кБ/сек. А просто закачки с одного сервера ни разу не превысили 200 кБ/сек.
Ну во-первых, торренты устанавливают соединения не только с внешними серверами (точнее другими торрент-клиентами, но вне сети этого провайдера), но и с тем, что находятся в локальной сети провайдера. А часто у провайдеров по тарифам скорость в локальной сети (то есть между двумя компьютерами, которые подключены к одному провайдеру) не ограничивается. А во-вторых, для проверки скорости надо использовать хороший сервер, который гарантированно подключён к интернету через более скоростной канал, чем предоставляет любой провайдер для простых людей. Например, тот же Yandex, который имеет сервис определения скорости, обладает такими серверами и поэтому всегда будет показывать правильную скорость.
984259h Ну если усторят приблизительные данные, то можно погуглить GetIfTable() Там в структуре MIB_IFROW dwMtu-The Maximum Transmission Unit (MTU) size in bytes. dwSpeed-The speed of the interface in bits per second. http://msdn.microsoft.com/en-us/library/aa365943(VS.85).aspx
Можно попробовать ковырнуть флеш, который используется на сервисе http://speedtest.net/ чтобы посмотреть, как он работает. И использовать его схему работы. Он показывает точно (и аплоад, и даунлоад)
Кстати, вот тут http://speedtest.net/mini.php предлагают разместить на своём сервере такой счетчик. Может там в зипе и есть необходимое.
Чтобы не зависеть от производительности сервера - можно открыть несколько параллельных закачек на разные сервера. Начать считать от момента, когда начнут поступать данные от самого последнего сервера и закончить считать в момент самого первого окончания.
//чо та такое для отправки и аналогично же для приема же инт цРид=1,олд_тайм=0,коунт_байтенг=0, шпиид=0; бает буфер[128]; вайле(цРид!=0) { ньютайм=ГетТикЦоунт(); иф (1000=<(ньютайм-олдтайм)) { шпиид=коунт_байтенг; принтф("%у килобаетов в сек\н",шпиид); Олд_тайм=нью_тайм; коунт_байтенг=0; } ридфаел(хендолфаел,&буфер,сайзоф(буфер),цРид,нуль); фор (сендкоунт=0;цРид==(сендкоунт=+(сенд(хендолсокет,&буфер,цРид,нуль))) { } коунт_байтенг=+цРид; }
наверно Размер зипа 94Мб!!! Похоже там карта всех серверов для тестирования, а тестирование все равно идет на серверах. Т.е. можно только клиентскую часть поймать. Думаю ее проще через общение со speedtest поймать, чем искать среди 94 Мб
_sheva740 у меня на впн след. код показывает : Код (Text): DWORD dwSize = 0; GetIfTable(NULL,&dwSize, false); PVOID pMemory = (PVOID)GlobalAlloc(GMEM_ZEROINIT,dwSize); PMIB_IFTABLE pMibIfTable = (PMIB_IFTABLE)pMemory; GetIfTable(pMibIfTable,&dwSize,TRUE); for (int i = 0 ; pMibIfTable->dwNumEntries > i; i++) { if (pMibIfTable->table[i].dwMtu == 1000) { Sleep(1000); } } GlobalFree(pMemory); что толком показывает значение dwMtu ???? и по каким признакам определить активный адаптер (тот который в текущем времени подключен к интернету ) ???