Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.05;
Скачать: CL | DM;

Вниз

Определение траффика через модемное соединение.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.008 c
14-13772
Bboy
2002-07-09 11:17
2002.08.05
Что за хрень, не получается поиграть!!!


14-13765
AL2002
2002-07-08 19:17
2002.08.05
Можно ли защитить свою прогу?


1-13702
AndreiKvin
2002-07-23 15:48
2002.08.05
Что выполняется быстрее


7-13836
Nubie
2002-05-21 02:56
2002.08.05
???Как запустить программу???


1-13604
иван
2002-07-24 16:58
2002.08.05
ПОМОЖИТЕ, ЧЕМ МОЖИТЕ!!!!!!!!