获取指定进程所占用的网络资源

mobdx_19840908 2010-04-18 03:51:44
我在开发一个winform程序其中用到了WebBrowser控件。在WebBrowser控件打开网页时我想检测一下客户的网速是否达到软件的要求。不符合要求的话。在使用过程中给予提示(马上给予提示)。目前我也只能得到当前客户上传和下载的网速。但是我不知道客户网速的上限是多少。还有就是WebBrowser控件所占用的网络资源(实时)是多少。谢谢大家
...全文
468 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
mobdx_19840908 2010-04-18
  • 打赏
  • 举报
回复
检测网卡的这个早已经做了。但是客户可能开其他软件比如PPS看电影。主要还是要知道当前程序所使用的网络资源而不是所有使用的网络资源
皇城龙三 2010-04-18
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 wuyq11 的回复:]
timer定时查询
http://www.codeproject.com/KB/system/networkmonitorl.aspx
[/Quote]

其实这里说的也是一个思路,也就是监控网卡,不过也需要本机有数据发送操作,才可以看到本机的速率变化,最后面的WMI调用那段代码会很耗费资源,建议参考它前面2个代码,也是很好的思路
mobdx_19840908 2010-04-18
  • 打赏
  • 举报
回复
wuyq11 你给的是网卡的网络使用情况 不过也谢谢你
mobdx_19840908 2010-04-18
  • 打赏
  • 举报
回复
有点思路了。你要是能给个算法。我就可以去实现了
mobdx_19840908 2010-04-18
  • 打赏
  • 举报
回复
看来我还是了解的不透彻。谢谢你了。那这么说的话我是不是可以像服务器发送一个http请求然后等服务器返回一个固定大小的网页。然后用发送时的时间和得到返回的时间来判断延迟呢。你能给个具体的算法吗
皇城龙三 2010-04-18
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 mobdx_19840908 的回复:]
可是我没有办法让服务器开启ping
[/Quote]

不用ping也可以,因为目的不是用ping,目的是发报测试,ping实现的效果也是发包。
wuyq11 2010-04-18
  • 打赏
  • 举报
回复
皇城龙三 2010-04-18
  • 打赏
  • 举报
回复
其实无论怎么测速,测带宽,其实根本原理是一样的,因为网络最终传输的还是数据包,简单的说,也就是测试数据包从一端到另一端的速度,最大带宽其实也就是理论的最高速度。所以速度可以达到标准就可以了。(当然前提是广义上的数据包大小要满足你的定义)

目前大部分的网络游戏测速,都是这么做的。
mobdx_19840908 2010-04-18
  • 打赏
  • 举报
回复
可是我没有办法让服务器开启ping
mobdx_19840908 2010-04-18
  • 打赏
  • 举报
回复
那你就比较倾向于建立线程每隔一段时间就去PING一下是吗
皇城龙三 2010-04-18
  • 打赏
  • 举报
回复
其实测速只是一个很笼统的概念,这里主要看针对的是最大带宽还是网络时延,刚才说的ping的实现主要是对延迟的测试,不过带宽被严重占用的情况下,数据包在buffer队列等候的时间就会加大,ping的返回RTT值就会很大。所以对网络时延的测试数据值是网络状况良好与否的很好反应。
mobdx_19840908 2010-04-18
  • 打赏
  • 举报
回复
还是没有人吗
mobdx_19840908 2010-04-18
  • 打赏
  • 举报
回复
自己顶
mobdx_19840908 2010-04-18
  • 打赏
  • 举报
回复
恩~技术上呢没有像你说的哪么做过。会不会很复杂呢?主要就是我说的实时检测的问题。最好是能知道webbrowser控件所占用的网络资源或者说软件当前进程所占用的网络资源。比如说给我提供一个window的api来检测
皇城龙三 2010-04-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 mobdx_19840908 的回复:]
你所说的使用多线程。那不就把网络资源拆分了吗。如何测试网速呢
[/Quote]

是让客户端多线程的测试服务器端,多线程只是把任务分解,但是完成的还是一个整体过程,类似迅雷,你用迅雷开10个线程下载一个文件,那么这时候达到的速度,就是你本机在这个网络中相对这个下载文件的峰值。

除非你的网络带宽值很大,这样的话峰值就变成服务器端的网络出口瓶颈值。
mobdx_19840908 2010-04-18
  • 打赏
  • 举报
回复
而且我访问的服务器PING被禁掉了
mobdx_19840908 2010-04-18
  • 打赏
  • 举报
回复
呵呵~我的那里也是这样写的。但是~我不是说了吗要实时测试。按这个方法来做的话就得在加一个线程。每隔一段时间就去PING一下这样会不会影响客户体验呢
皇城龙三 2010-04-18
  • 打赏
  • 举报
回复
或者在你的软件中加入ping的功能,进行一下网络环境的测试,指定一个地址,如果返回值达到要求那么就是合格

下面是c# ping的实现,可以返回的IP, timeout, buffer等值,可以根据自己需要获取比较。

public string sPing(string IP)
{
Ping pingSender = new Ping();
PingOptions options = new PingOptions();
options.DontFragment = true;
string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
byte[] buffer = Encoding.ASCII.GetBytes(data);
int timeout = 1200;
//string IP = "192.168.100.1";
PingReply reply = pingSender.Send(IP, timeout, buffer, options);

if (reply.Status == IPStatus.Success)
{
//string sText;

string sPing;

sPing = "网络合格";


return sPing;


}
else
{
return "网络故障";


}



}

mobdx_19840908 2010-04-18
  • 打赏
  • 举报
回复
你所说的使用多线程。那不就把网络资源拆分了吗。如何测试网速呢
mobdx_19840908 2010-04-18
  • 打赏
  • 举报
回复
谢谢。请问能直接获得当前程序所占用的网络资源吗。就是webbrowser控件
加载更多回复(3)

110,571

社区成员

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

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

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