Как получить скорость сети, будь она быстрой или медленной в xamarin iOS? - PullRequest
1 голос
/ 10 апреля 2020

Как получить скорость сети, быстрая или медленная в xamarin iOS? Я использовал NetworkReachability, но это дает результат, что URL достижим или нет? Я хочу получить скорость сети, быструю или плохую? `Private stati c NetworkReachability _defaultRouteReachability;

    public static event EventHandler ReachabilityChanged;

    public static bool IsNetworkAvailable(string url)
    {
        if (_defaultRouteReachability == null)
        {
            _defaultRouteReachability = new NetworkReachability(url);
            _defaultRouteReachability.SetNotification(OnChange);
            _defaultRouteReachability.Schedule(CFRunLoop.Current, CFRunLoop.ModeDefault);
        }

        NetworkReachabilityFlags flags;

        return _defaultRouteReachability.TryGetFlags(out flags) &&
            IsReachableWithoutRequiringConnection(flags);
    }

    private static bool IsReachableWithoutRequiringConnection(NetworkReachabilityFlags flags)
    {
        // Is it reachable with the current network configuration?
        bool isReachable = (flags & NetworkReachabilityFlags.Reachable) != 0;

        // Do we need a connection to reach it?
        bool noConnectionRequired = (flags & NetworkReachabilityFlags.ConnectionRequired) == 0;

        // Since the network stack will automatically try to get the WAN up,
        // probe that
        if ((flags & NetworkReachabilityFlags.IsWWAN) != 0)
            noConnectionRequired = true;

        return isReachable && noConnectionRequired;
    }

    private static void OnChange(NetworkReachabilityFlags flags)
    {
        var h = ReachabilityChanged;
        if (h != null)
            h(null, EventArgs.Empty);
    }`

1 Ответ

1 голос
/ 11 апреля 2020

Нечто подобное может помочь вам, если вы не хотите использовать библиотеку. Это в основном дает вам техническое определение inte rnet speed, но реальное число будет немного больше. Это очень похоже на решение, предложенное @ Martheen

public async Task<string> CheckInternetSpeed()
{
    //DateTime Variable To Store Download Start Time.
    DateTime dt1 = DateTime.Now;
    string internetSpeed;
    try
    {
        // Create Object Of WebClient
        var client = new HttpClient();
        //Number Of Bytes Downloaded Are Stored In ‘data’
        byte[] data = await client.GetByteArrayAsync("https://www.example.com/");
        //DateTime Variable To Store Download End Time.
        DateTime dt2 = DateTime.Now;
        //To Calculate Speed in Kb Divide Value Of data by 1024 And Then by End Time Subtract Start Time To Know Download Per Second.
        Console.WriteLine("ConnectionSpeed: DataSize (kb) " + data.Length / 1024);
        Console.WriteLine("ConnectionSpeed: ElapsedTime (secs) " + (dt2 - dt1).TotalSeconds);
        internetSpeed = "ConnectionSpeed: (kb/s) " + Math.Round((data.Length / 1024) / (dt2 - dt1).TotalSeconds, 2);
    }
    catch (Exception ex)
    {
        internetSpeed = "ConnectionSpeed:Unknown Exception-" + ex.Message;
    }
    Console.WriteLine(internetSpeed);
    return internetSpeed;
}

Библиотека Xamarin Essentials не может дать вам скорость Inte rnet, но если вы используете внедрение зависимостей, вы можете использовать собственные API-интерфейсы, такие как это .

...