Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.48 MB
Время: 0.005 c
3-13546
Prog_mail
2002-07-15 10:58
2002.08.05
Как редактировать отсортированный набор данных?


1-13596
iGUra
2002-07-24 15:46
2002.08.05
Генератор Случайных последовательностей


1-13715
c0pYc@t
2002-07-17 08:34
2002.08.05
Помогите с Thread


1-13669
Cowboy
2002-07-23 17:21
2002.08.05
TImage & TTabSheet


1-13603
drunik
2002-07-24 14:49
2002.08.05
Этот долбаный Excel





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский