Тема: AHK: Узнать скорость интернет-соединения
Хеллоу.
У меня возник вопрос: возможно-ли как-то через DDL узнать скорость интернета, не отправляя запросы к сайту?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Хеллоу.
У меня возник вопрос: возможно-ли как-то через DDL узнать скорость интернета, не отправляя запросы к сайту?
А что такое DDL? И скорость чего измерять, если никакая информация не передаётся? Можно узнать у провайдера, какая скорость заявлена.
teadrinker, извиняюсь, ошибся, DLL*.
teadrinker, ну какие-никакие файлы все равно передаются всегда, вот хотелось бы узнать, как мониторить это дело.
Или же смотрите, я передаю json объект на сервер через WinHttpRequest.5.1, можно-ли тогда узнать, какова была скорость интернета при отправке данных?
какие-никакие файлы все равно передаются всегда, вот хотелось бы узнать, как мониторить это дело.
Писал когда-то:
#Persistent
TrafficMonitoring(1000)
Return
TrafficMonitoring(period := 0) {
static IsSet
if !IsSet {
IsSet := true
UpdateTraffic()
SetTimer, % A_ThisFunc, % period
Return
}
obj := UpdateTraffic()
TrayTip,, % "Downloaded: " . obj.Downloaded
. "`nUploaded: " . obj.Uploaded
. "`nUploadBytePerSec: " . obj.UploadBytePerSec
. "`nDownloadBytePerSec: " . obj.DownloadBytePerSec
}
UpdateTraffic() {
static dnOld, upOld, IsSet, TrInfo, timeOld
if !IsSet {
IsSet := true
TrInfo := new TrafficInfo
data := TrInfo.GetInfo()
dnOld := data.dn
upOld := data.up
timeOld := A_TickCount
Return
}
data := TrInfo.GetInfo()
dnNew := data.dn
upNew := data.up
timeNew := A_TickCount
elapsedSec := (timeNew - timeOld)/1000
dnRate := Round( (dnNew - dnOld) / elapsedSec )
upRate := Round( (upNew - upOld) / elapsedSec )
timeOld := timeNew
dnOld := dnNew
upOld := upNew
Return { Downloaded: dnNew, Uploaded: upNew, UploadBytePerSec: upRate, DownloadBytePerSec: dnRate }
}
class TrafficInfo {
__New() {
static MIB_IF_ROW2
this.hModule := DllCall("LoadLibrary", Str, "Iphlpapi.dll", Ptr)
VarSetCapacity(MIB_IF_ROW2, 1352, 0)
this.pData := &MIB_IF_ROW2
DllCall("iphlpapi\GetBestInterface", Ptr, 0, PtrP, IfIndex)
NumPut(IfIndex, this.pData + 8)
}
__Get(key) {
if key in dn,up
Return NumGet(this.pData + (key = "dn" ? 1256 : 1320), "Int64")
}
__Delete() {
DllCall("FreeLibrary", Ptr, this.hModule)
}
GetInfo() {
DllCall("iphlpapi\GetIfEntry2", Ptr, this.pData)
Return { dn: this.dn, up: this.up }
}
}
Значения Downloaded и Uploaded — это в байтах с начала сессии, можно проверить, если щёлкнуть в папке «Сетевые подключения» по текущему подключению. Значения UploadBytePerSec и DownloadBytePerSec — сколько отправлено и загружено в последнюю секунду.
json объект на сервер через WinHttpRequest.5.1, можно-ли тогда узнать, какова была скорость интернета при отправке данных?
Тут всё просто — определить, сколько байт в JSON, засечь время, определить, сколько времени заняла отправка, когда она будет завершена.
teadrinker, феенкс, то есть мне просто перед запросом указать функцию TrafficMonitoring(1000) и все?
Нет, она мониторит только общий траффик. Перед запросом:
определить, сколько байт в JSON, засечь время, определить, сколько времени заняла отправка, когда она будет завершена
и поделить байты на время.
Раньше Speedtest.net позволял устанавливать тестилку на сайт. Но можно и просто какой-нибудь файл известного размера скачивать и время засекать.
date = %A_DD% %A_MMM% %A_Hour%:%A_Min%
StartTime := A_TickCount
UrlDownloadToFile, http://grisha.unixserv.ru/speedtest/speedtest/random2000x2000.jpg, %A_Temp%\speedtest
EndTime := A_TickCount
If !ErrorLevel ; если не произошло ошибок
{
FileGetSize, filesize, %A_Temp%\speedtest ; определяется размер скачанного файла в байтах
Calc := filesize*8/(10**6) ; определяется размер скачанного файла в мегабитах
Calc := Round(Calc/((EndTime - StartTime)/1000),2) ; определяется средняя скорость загрузки
FileAppend, %date%%A_Tab%DL %Calc% Mbit/s`r`n, history.ini ; результат записывается в журнал
}
Else FileAppend,%date%%A_Tab%ERROR`r`n, history.ini
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться