C#监控本程序的网络流量

vrestart 2010-05-04 02:31:37
如题,公司项目提出了新的需求,要实时显示本程序的网络流量(上传、下载),请高手解答,谢谢
...全文
1055 24 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
skep99 2010-05-05
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 vrestart 的回复:]
终于调通了,不过结果和我要的不太一样,这个办法获取的是当前网卡的所有网络流量,而我想获得本程序(单个进程)的网络流量,请问有办法吗?
[/Quote]
那还用这么麻烦么,自己用什么端口发的多少数据,收多少数据,累计一下不就好了么.
总归是先有数据,后传输的吧.
sunchen891229 2010-05-05
  • 打赏
  • 举报
回复
路过,学习班了~
vrestart 2010-05-05
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 heword456 的回复:]
这类程序占用系统资源和网络资源多么?
[/Quote]

监控系统,占用网络流量很大,所以客户提出要实时监控流量的需求
heword456 2010-05-05
  • 打赏
  • 举报
回复
这类程序占用系统资源和网络资源多么?
mardanjan2010 2010-05-05
  • 打赏
  • 举报
回复
学习学习。。。。
vrestart 2010-05-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 skep99 的回复:]
C# code

PerformanceCounterCategory performanceCounterCategory = new PerformanceCounterCategory("Network Interface");
string instance = performanceCounterCategory.GetInstanc……
[/Quote]

终于调通了,不过结果和我要的不太一样,这个办法获取的是当前网卡的所有网络流量,而我想获得本程序(单个进程)的网络流量,请问有办法吗?
Alden 2010-05-05
  • 打赏
  • 举报
回复
找个sniffer软件监控就可以了。
deknight 2010-05-05
  • 打赏
  • 举报
回复
mark
vrestart 2010-05-05
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 skep99 的回复:]

那数据层是不是你这里实现的?检测数据流是一样的效果啊~
[/Quote]

数据层不在我们这实现,我们只是根据DLL提供的方法,传递相应的功能编号
skep99 2010-05-05
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 vrestart 的回复:]
引用 19 楼 skep99 的回复:
那还用这么麻烦么,自己用什么端口发的多少数据,收多少数据,累计一下不就好了么.
总归是先有数据,后传输的吧.


可以是可以,不过这样就得改底层的DLL了,那部分不是我们做的,没有源码...
[/Quote]
那数据层是不是你这里实现的?检测数据流是一样的效果啊~
vrestart 2010-05-05
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 skep99 的回复:]
那还用这么麻烦么,自己用什么端口发的多少数据,收多少数据,累计一下不就好了么.
总归是先有数据,后传输的吧.
[/Quote]

可以是可以,不过这样就得改底层的DLL了,那部分不是我们做的,没有源码...
skep99 2010-05-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 vrestart 的回复:]
performanceCounterReceived.NextValue()

结果一直为0
[/Quote]

是不是网卡不对?我的有

while (true)
{
float fSentValue = performanceCounterSent.NextValue();
float fReceivedValue = performanceCounterReceived.NextValue();

if (fSentValue > 0)
Console.WriteLine(fSentValue);
if (fReceivedValue > 0)
Console.WriteLine(fReceivedValue);

}

输出:
16108.37
3662.971
26752.68
11913.87
26157.32
26349.15
13897.95
13830.07
27150.8
14567.53
29540.24
29703.89
27300.37
15136.7
16420.02
15140.42
18738.04
15964.9
47948.64
25494.11
27066.91
13403.38
14714.03
14374.85
27039.99
15966.99
49639.53
15234.44
15394.44
14941.1
6337.153
4291.625
48130.29
25782.73
14495.86
14275.15
26345.44
14996.79
9571.66
17698.15
26471.31
14817.96
16270.97
15909.12

vrestart 2010-05-04
  • 打赏
  • 举报
回复
补充:我是每1秒钟取一次的
vrestart 2010-05-04
  • 打赏
  • 举报
回复
performanceCounterReceived.NextValue()

结果一直为0
skep99 2010-05-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 vrestart 的回复:]

还有个小问题,呵呵,就是这段代码:
string instance = performanceCounterCategory.GetInstanceNames()[0];

怎样通过IP地址判断所使用的网卡呢?
[/Quote]

稍微有点麻烦

先从Win32_NetworkAdapterConfiguration去取该机的所有网卡配置,能取到ip和设备名
然后用设备名和performanceCounterCategory.GetInstanceNames()[0]的设备名相匹配

符合的即为同一网卡,实现了ip->设备的查找

vrestart 2010-05-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 skep99 的回复:]
引用 7 楼 lzsh0622 的回复:
参考:用c#监控网络流量


这是通过抓包计算流量的噢~效率怎么样?
[/Quote]

还有个小问题,呵呵,就是这段代码:
string instance = performanceCounterCategory.GetInstanceNames()[0];

怎样通过IP地址判断所使用的网卡呢?
skep99 2010-05-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lzsh0622 的回复:]
参考:用c#监控网络流量
[/Quote]

这是通过抓包计算流量的噢~效率怎么样?
lzsh0622 2010-05-04
  • 打赏
  • 举报
回复
skep99 2010-05-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 vrestart 的回复:]
回复:skep99
取值的时候用performanceCounterSend.NextValue()吗?
[/Quote]

对的,浮点型,单位是字节

float fSentValue = performanceCounterSent.NextValue() / 1024;
float fSentValue = performanceCounterReceived.NextValue() / 1024;
vrestart 2010-05-04
  • 打赏
  • 举报
回复
回复:skep99
取值的时候用performanceCounterSend.NextValue()吗?
加载更多回复(4)

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧