C# 我可以写一个程序来限制每天40mb的互联网使用吗?

C# 我可以写一个程序来限制每天40mb的互联网使用吗?,c#,.net,bandwidth,C#,.net,Bandwidth,我的朋友让我写一个程序,将每天的互联网使用限制在40MB。如果达到每天40 Mb的配额,系统中的任何其他程序都不能访问互联网。告诉他你编写了一个程序,但请一个人来观察他的互联网使用情况,并在达到限制时拔掉插头 编辑:显然我的幽默感不好 无论如何,我认为这将是一个相当大的承诺,我找不到任何代码为它。但我确实找到了这个 您需要监视网络活动。一个人可以使用类来实现这一点 请记住,每次连接断开时都会重置统计信息,因此您必须将它们存储在某个位置 您需要禁用internet连接,请参阅 这应该可以在路由

我的朋友让我写一个程序,将每天的互联网使用限制在40MB。如果达到每天40 Mb的配额,系统中的任何其他程序都不能访问互联网。

告诉他你编写了一个程序,但请一个人来观察他的互联网使用情况,并在达到限制时拔掉插头

编辑:显然我的幽默感不好

无论如何,我认为这将是一个相当大的承诺,我找不到任何代码为它。但我确实找到了这个

  • 您需要监视网络活动。一个人可以使用类来实现这一点

    请记住,每次连接断开时都会重置统计信息,因此您必须将它们存储在某个位置

  • 您需要禁用internet连接,请参阅


  • 这应该可以在路由器中实现,或者使用cFosSpeed也可以提供配额,但是我现在知道任何免费软件/开源应用程序已经做到了这一点

    如果要自己写,你必须以某种方式计算到目前为止发送的数据量,如果多台计算机在同一个网络上,则更难跟踪。

    是的

    与其说是可行的解决方案,不如说是概念证明

    using System;
    using System.Linq;
    using System.Threading;
    using System.Net.NetworkInformation;
    
    namespace ConsoleApplication1
    {
        class Program
        {
    
    
            static void Main(string[] args)
            {
                const double ShutdownValue = 40960000D;
                const string NetEnable = "interface set interface \u0022{0}\u0022 DISABLED";
                const string NetDisable = "interface set interface \u0022{0}\u0022 ENABLED";
    
                double Incoming = 0;
                double Outgoing = 0;
                double TotalInterface;
                string SelectedInterface = "Local Area Connection";
    
                NetworkInterface netInt = NetworkInterface.GetAllNetworkInterfaces().Single(n => n.Name.Equals(SelectedInterface));
    
                for (; ; )
                {
                    IPv4InterfaceStatistics ip4Stat = netInt.GetIPv4Statistics();
    
                    Incoming += (ip4Stat.BytesReceived - Incoming);
                    Outgoing += (ip4Stat.BytesSent - Outgoing);
                    TotalInterface = Incoming + Outgoing;
    
                    string Shutdown = ((TotalInterface > ShutdownValue) ? "YES" : "NO");
    
                    if (Shutdown == "YES")
                    {
                        System.Diagnostics.Process.Start("netsh", string.Format(NetDisable, SelectedInterface));
                    }
    
                    string output = string.Format("Shutdown: {0} | {1} KB/s", Shutdown, TotalInterface.ToString());
                    Console.WriteLine(output);
    
                    Thread.Sleep(3000);
                }
            }
        }
    }
    

    我不太清楚,但也许有些路由器会提供这样的功能。你的朋友打算付钱给你吗?若否,原因为何?买一个程序怎么样,比如@Lasse V.Karlsen:他不会付钱的。我只是想编个程序。对他,对我也是。@Chris:只是猜测,但他似乎只是想学习。写一个代理服务器。配置控制面板+Internet以使用该代理。我只想指出,此代码段中存在错误。我故意添加了它们。