请问怎样获取RAS拨号的接收字节数和发送字节数?(100分)

  • 主题发起人 主题发起人 fanofdelphi
  • 开始时间 开始时间
F

fanofdelphi

Unregistered / Unconfirmed
GUEST, unregistred user!
请问怎样获取RAS拨号的接收字节数和发送字节数?
 
可以到 http://cndn.uu1001.com 下载 流量监控 源码 ,老陈 写的.
 
我不知道“RAS 拨号”是个虾米玩意,不过我过去在 Delphi 盒子发过一个监控各个网卡流量的程序,您可以到这个地址下载试一试:
http://www.2ccc.com/article.asp?articleid=3245
 
没太指望会有人答复,所以几天没来,先谢谢楼上两位。

to “bsense”:我用“流量监控”在“http://cndn.uu1001.com” 上搜索了一下,但没找到,能否告之一下该源码的具体名称,再次感谢!

to “vvyang”:
我指的“RAS”是 Windows“Remote Access Service Functions”类别中的一组 API 函数,“拨号网络”许多基本功能由它实现。但我的 MSDN 中似乎找不到关于如何获取一个连接流量的函数。所以上网求救,问一下究竟那些 API 函数可实现此功能?
 
To fanofdelphi:
我的程序地址不是给你了么?只不过是监控网卡的,对 Modem 不知好不好使。
虽然我对那个虾米 RAS 不感兴趣,但是我知道 RasGetConnectionStatistics 可以获得流量,参数 RAS_STATS.dwBps 是速度,RAS_STATS.dwBytesXmited 是传输量,RAS_STATS.dwBytesRcved 是接收量。
本来想写个程序给你,可惜我这不能拨号,所以也不好调试,也就不好信口胡说误导群众了。
 
to “vvyang”:
非常感谢不吝赐教!您回答的正是我想要的,但是在我的 MSDN 中找不到 RasGetConnectionStatistics 函数也找不到 RAS_STATS 结构,难道我的 MSDN 太老了?6.0 版的。应该不会呀,这样的函数 95、98 就有了呀!

您不必写程序给我,只要告诉我如何在 MSDN 或其它帮助性文档中找到这样的函数即可!

再谢!
 
To fanofdelphi:
1、今晚闲着没事,给你写了个较完整的程序。虽然我不知道 RAS 是个虾米玩意,但发现获得拨号流量比网卡的容易多了。程序应该没问题,我无法调试,你试一下。
2、界面上放两个 Label,Label1 用来显示拨号设备、名称什么的,Label2 用来实时显示流量、速度什么的;还需要一个 Timer(初始状态 Enabel = False),用来实时刷新 Label2。
const
rasapi32 = 'rasapi32.dll';
RAS_MaxEntryName = 256;
RAS_MaxDeviceType = 16;
RAS_MaxDeviceName = 128;

type
HRASCONN = LongWord;

RASCONN = record
dwSize: DWORD;
hrasconn: HRASCONN;
szEntryName: array[0..RAS_MaxEntryName] of Char;
szDeviceType: array[0.. RAS_MaxDeviceType] of Char;
szDeviceName: array[0.. RAS_MaxDeviceName] of Char;
end;

RAS_STATS = record
dwSize: DWORD;
dwBytesXmited: DWORD;
dwBytesRcved: DWORD;
dwFramesXmited: DWORD;
dwFramesRcved: DWORD;
dwCrcErr: DWORD;
dwTimeoutErr: DWORD;
dwAlignmentErr: DWORD;
dwHardwareOverrunErr: DWORD;
dwFramingErr: DWORD;
dwBufferOverrunErr: DWORD;
dwCompressionRatioIn: DWORD;
dwCompressionRatioOut: DWORD;
dwBps: DWORD;
dwConnectDuration: DWORD;
end;

function RasEnumConnections(var lprasconn: RASCONN; var lpcb: DWORD; var lpcConnections: DWORD): DWORD; stdcall; external rasapi32 name 'RasEnumConnectionsA';

function RasGetConnectionStatistics(hRasConn: HRASCONN; var Statistics: RAS_STATS): DWORD; stdcall; external rasapi32 name 'RasGetConnectionStatistics';

function GetActiveRasConnection: RASCONN;
var
dwCnnSize, dwRetries, dwCnnNum: DWORD;
begin
dwCnnSize := SizeOf(RASCONN);
dwRetries := 5;
while dwRetries > 0 do
begin
FillChar(Result, dwCnnSize, 0);
Result.dwSize := dwCnnSize;
if RasEnumConnections(Result, dwCnnSize, dwCnnNum) = 0 then Break;
Dec(dwRetries);
end;
end;

var
cnn: RASCONN;

procedure TForm1.Button1Click(Sender: TObject);
begin
cnn := GetActiveRasConnection;
if cnn.hrasconn = 0 then Exit;
Label1.Caption := '拨号名称: ' + cnn.szEntryName + #13 + '设备名: ' + cnn.szDeviceName;
Timer1.Enabled := not Timer1.Enabled;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
const
cb = SizeOf(RAS_STATS);
var
stat: RAS_STATS;
begin
if cnn.hrasconn = 0 then Exit;
FillChar(stat, cb, 0);
stat.dwSize := cb;
RasGetConnectionStatistics(cnn.hrasconn, stat);
Label2.Caption := '速率: ' + IntToStr(stat.dwBps) + ' bps' + #13 +
'发送: ' + IntToStr(stat.dwBytesXmited) + ' Bytes' + #13 +
'收到: ' + IntToStr(stat.dwBytesRcved) + ' Bytes';
end;
3、MSDN 2003 上有两个函数的说明,我翻译成了 Pascal,常量是我在头文件里找的。
 
楼主开始玩失踪了,能不能用给个话!
 
to vvyang:
再三感谢!您的代码我试过,好用!RasGetConnectionStatistics 函数正是我所要,看来我得换新版的 MSDN 了。只有一点小遗憾,RasGetConnectionStatistics 好象是 Windows 2000 以后提供的,Win9X 没有,不知道 Win9X 下是哪个函数。

再次感谢 vvyang !
 
To fanofdelphi:
不是很 Easy 么,你把程序在 98 下编译不就行了??
另外 RASCONN 的结构在 98 下与 2000 下略有区别,你看看 MSDN 吧...
 
后退
顶部