Форум: "Сети";
Текущий архив: 2002.08.05;
Скачать: [xml.tar.bz2];
ВнизОпределение траффика через модемное соединение. Найти похожие ветки
← →
Ajax (2002-05-11 22:02) [0]Нужно определить количество принятых и переданных байт. Делаю так:
TRAS_STATS = record
dwSize : Longint;
dwBytesXmited : Longint;
dwBytesRcved : Longint;
dwFramesXmited : Longint;
dwFramesRcved : Longint;
dwTimeoutErr : Longint;
dwAlignmentErr : Longint;
dwHardwareOverrunErr : Longint;
dwFramingErr : Longint;
dwBufferOverrunErr : Longint;
dwCompressionRatioIn : Longint;
dwCompressionRatioOut: Longint;
dwBps : Longint;
dwConnectDuration : Longint;
end;
function RasGetConnectionStatistics(hConn: LPHRasConn; var RAS_STATS:TRAS_STATS ): Longint; stdcall;
function RasGetConnectionStatistics; external "rasapi32.dll" name "RasGetConnectionStatistics";
Procedure GetRASProp;
const MaxEntries = 100;
var BufSize : Integer;
NumEntries: Integer;
Entries : Array[1..MaxEntries] of TRasConn;
cstat : TRAS_STATS;
Begin
Entries[1].dwSize := SizeOf(TRasConn);
Bufsize:=SizeOf(TRasConn)*MaxEntries;
RasEnumConnections(@Entries[1], BufSize, NumEntries);
if numentries > 0 then
begin
cstat.dwSize:=sizeof(Tras_stats);
RasGetConnectionStatistics(@Entries[1],cstat);
ShowMessage(IntToStr(cstat.dwBytesRcved));
end
End;
Получаю постоянно одно и то же число. Я вот думаю, что неправильно объявил функцию RasGetConnectionStatistics. Или может нужно использовать LPRAS_STATS = ^TRAS_STATS ?
← →
VuDZ (2002-05-12 18:19) [1]RasGetConnectionStatisticsThe RasGetConnectionStatistics function retrieves accumulated connection statistics for the specified connection.
DWORD RasGetConnectionStatistics(
HRASCONN hRasConn, // handle to the connection
RAS_STATS *lpStatistics // buffer to receive statistics
);
Parameters
hRasConn,
[in] Handle to the connection. Use RasDial or RasEnumConnections to obtain this handle.
lpStatistics
[in, out] Pointer to the RAS_STATS structure that, on output, receives the statistics.
On input, set the dwSize member of this structure to sizeof(RAS_STATS).
This parameter cannot be NULL.
Так что ты должен передавать указатель
← →
Ajax (2002-05-13 18:38) [2]То есть все-таки LPRAS_STATS = ^TRAS_STATS и cstat:LPRAS_STATS?
← →
VuDZ (2002-05-13 19:37) [3]наверно, я в таких тонкостях делфи не секу уже :<
← →
Wic (2002-05-16 14:09) [4]>to Ajax
Напиши, получилось?
← →
Дмитрий Баранов (2002-05-16 18:30) [5]>>То есть все-таки LPRAS_STATS = ^TRAS_STATS и cstat:LPRAS_STATS?
Попробуй, действительно, обьвить прототип с указателем, а в функцию передавать адрес объекта, который ты создаешь в стеке (чтобы с выделением памяти не трахаться).
RasGetConnectionStatistics(@Entries[1],@cstat);
Постоянное число - почти стопроцентно, что это адрес.
← →
Ajax (2002-05-16 21:01) [6]>Wic © (16.05.02 14:09)
Нет.
>Дмитрий Баранов (16.05.02 18:30)
Ох, как я уже только не пытался... Практически все возможные варианты перепробовал. Либо выдает постоянное число, либо, если используюcstat: LPRAS_STATS
, "Access violation..." в строкеcstat.dwSize:=sizeof(Tras_stats);
>All
Попробуйте разобраться, ведь все-равно многим нужно траффик мерить, а до сих пор в этом форуме я нормальных идей по этому поводу не видел.
← →
Ajax (2002-05-18 16:36) [7]Скачал якобы последний перевод ras.h. Так там все вообще как-то по-другому...
← →
Wic (2002-05-20 11:48) [8]1. > RasGetConnectionStatistics(@Entries[1],cstat); - у тебя
> RasGetConnectionStatistics(@Entries[1],cstat);
HRASCONN hRasConn, // handle to the connection...
Ты уверен, что в @Entries[1] будет то, что надо?..
Именно RasGetConnectionStatistics не пользовался, в похожей функции RasGetConnectionStat (по видимому так, нет под руками исходников и SDK)делал:
глобальная:
var hras: ThRasConn;
..................
в программе:
RasGetConnectionStat(hras,.. и т.д.)
2. Ты сам устанавливешь соединение (RasDial) или используешь что-то стороннее?
Извиняюсь, если какие функции не так "обозвал" - пишу по памяти.
← →
gluka (2002-05-21 02:43) [9]Всё тут правильно, только:
1. В структуру еще одну запись добавь "dwCrcErr : Longint;", а то размер несовпадает;(MSSDK)
2. КОД:
TRAS_STATS = record
...
...
dwCrcErr : Longint;...
end;
...
var
cstat : Tras_stats;
...
...
RasGetConnectionStatistics();
Entries[1].hrasconn,@cstat
...
...
← →
Ajax (2002-05-21 16:36) [10]>Wic © (20.05.02 11:48)
1) За @Entries[1] я уверен точно, т.к. я то же самое использую в еще одной функции и она работает
2) Я соединение вообще не устанавливаю, я пытаюсь посчитать траффик уже установленного.
>gluka © (21.05.02 02:43)
У тебя есть опыт работы с этой функцией? Что можешь посоветовать? А то я начинаю подозревать, что в конце концов все старанья окажутся зря...
← →
Wic (2002-05-21 19:28) [11]1. Есть большое подозрение, что с соединением, установленным другой программой, функция работать не будет.
>1) "За @Entries[1] я уверен точно, т.к. я то же самое использую в еще одной функции и она работает"
А какая функция работает?
← →
Ajax (2002-05-21 20:06) [12]RasEnumConnections(@Entries[1], BufSize, NumEntries);
if numentries > 0 then begin
ShowMessage(">"+ strpas(@Entries[1].szEntryName)+"<");
То есть не напрямую конечно проверка, но тем не менее EntryName возвращается правильно.
← →
Gluka (2002-05-22 04:59) [13]Всё работает, что ещё надо!?!?!
>>>>
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, "Tipa_Ras";
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
LRS=^TRAS_STATS;
TRAS_STATS = record
dwSize : Longint;
dwBytesXmited : Longint;
dwBytesRcved : Longint;
dwFramesXmited : Longint;
dwFramesRcved : Longint;
dwCrcErr : Longint;
dwTimeoutErr : Longint;
dwAlignmentErr : Longint;
dwHardwareOverrunErr : Longint;
dwFramingErr : Longint;
dwBufferOverrunErr : Longint;
dwCompressionRatioIn : Longint;
dwCompressionRatioOut: Longint;
dwBps : Longint;
dwConnectDuration : Longint;
end;
function RasGetConnectionStatistics(hConn: Integer; RS: LRS): Longint; stdcall;
function RasGetConnectionStatistics; external "rasapi32.dll" name "RasGetConnectionStatistics";
var
Form1: TForm1;
implementation
Procedure GetRASProp;
var
BufSize : Integer;
NumEntries: Integer;
Entries : TRasConn;
cstat : Tras_stats; // or ^Tras_stats, LRS
Begin
Entries.dwSize := SizeOf(TRasConn);
Bufsize:=SizeOf(TRasConn);
RasEnumConnections(@Entries, BufSize, NumEntries);
if numentries > 0 then
begin
cstat.dwSize:=sizeof(Tras_stats);
RasGetConnectionStatistics(Entries.hrasconn,@cstat);
ShowMessage(Format("Kb "%g" polucheno!",[cstat.dwBytesRcved / 1024]));
end else
begin
ShowMessage("Not connected!!!");
Application.Terminate;
end
End;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
GetRASProp;
end;
end.
>>>>
← →
Ajax (2002-05-22 18:23) [14]Спасибо, все работает.
Я так понял, эта функция работает только под NT, 2000, XP. А как быть под 98.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2002.08.05;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.005 c