iOS获取链路速度(路由器速度测试)

iOS获取链路速度(路由器速度测试),ios,cocoa-touch,wifi,Ios,Cocoa Touch,Wifi,我想从iOS应用程序测试已连接路由器(wifi调制解调器)的速度 我在这里找到了一些东西,但找不到sockios.h和ethtool.h 是否可以将此代码移植到Objective-C,或者是否有其他方法 -- 很抱歉信息丢失,我的英语很差 我想测试ios设备和连接的wifi调制解调器之间的链路速度(发送速率) CWInterface类中有一个名为txRate的属性。我想把数据联系起来 /*! * @property * @abstract Current transmit rate (Mbps)

我想从iOS应用程序测试已连接路由器(wifi调制解调器)的速度

我在这里找到了一些东西,但找不到sockios.h和ethtool.h

是否可以将此代码移植到Objective-C,或者是否有其他方法

--

很抱歉信息丢失,我的英语很差

我想测试ios设备和连接的wifi调制解调器之间的链路速度(发送速率)

CWInterface类中有一个名为txRate的属性。我想把数据联系起来

/*!
* @property
* @abstract Current transmit rate (Mbps) of the CoreWLAN interface. 
* @discussion Dynamically queries the interface for the current transmit rate.
*/
@property(readonly) NSNumber *txRate NS_DEPRECATED_MAC(10_6, 10_7);

您可以使用
NSURLConnection
连接到您的测试服务器,并下载大约1MB的预设文件。使用NSURLConnection委托
-connection:didReceiveData:
-connectiondFinishLoading:
跟踪下载“到目前为止”并计算下载速度。

最终我找到了解决方案

#include <ifaddrs.h>
#include <net/if.h>

+ (double)getRouterLinkSpeed
{
    BOOL   success;
    struct ifaddrs *addrs;
    const struct ifaddrs *cursor;
    const struct if_data *networkStatisc;

    double linkSpeed = 0;

    NSString *name = [[NSString alloc] init];

    success = getifaddrs(&addrs) == 0;
    if (success)
    {
        cursor = addrs;
        while (cursor != NULL)
        {
            name=[NSString stringWithFormat:@"%s",cursor->ifa_name];

            if (cursor->ifa_addr->sa_family == AF_LINK)
            {
                if ([name hasPrefix:@"en"])
                {
                    networkStatisc = (const struct if_data *) cursor->ifa_data;
                    linkSpeed = networkStatisc->ifi_baudrate;
                }
            }
            cursor = cursor->ifa_next;
        }
        freeifaddrs(addrs);
    }

    return linkSpeed;
}
#包括
#包括
+(双)GetRouterLink速度
{
成功;
结构ifaddrs*地址;
常量结构ifaddrs*游标;
const struct if_data*networkStatisc;
双链路速度=0;
NSString*name=[[NSString alloc]init];
success=getifaddrs(&addrs)==0;
如果(成功)
{
游标=地址;
while(光标!=NULL)
{
名称=[NSString stringWithFormat:@“%s”,光标->ifa_名称];
如果(光标->ifa\U地址->sa\U族==AF\U链接)
{
如果([name hasPrefix:@“en”])
{
networkStatisc=(const struct if_data*)游标->ifa_数据;
链接速度=网络统计->ifi_波特率;
}
}
光标=光标->ifa\U下一步;
}
freeifaddrs(addrs);
}
返回链接速度;
}

目前没有官方(或苹果批准的)方式在iOS上获得LinkSpeed。过去有一些环洞不幸被关闭

您可以用来估计链路速度的最相似的指标是通过在本地网络上发送UDP数据包并测量其发送速率来测量wifi速度。这称为IP数据包发送比特率,在本ITU标准中定义

wifi速度测量的iOS实现在我们的iOS SDK中,您可以在这里找到:


此实现是最接近您估计路由器wifi速度的实现,而无需在路由器上实际放置任何有效负载文件。

我不想测试互联网速度,我只想测试调制解调器速度。好的。。。调制解调器连接到什么?@suleymancalik您的意思是要测试设备和wifi路由器之间的连接速度吗?我无法在您发布的Xcode代码上编译
+(double)getRouterLinkSpeed
。你能发布需要包含的标题吗?#包含#再包含一件事..这是以秒或毫秒为单位的速度吗?这个速度到底表示什么。实际上,我想计算在我的应用程序中传输数据所花费的时间,并想向用户显示这个估计的时间。测量时总是返回0。实际上,这是一个有点旧的代码,在iOS上工作正常6 & 7. 但我还没有在iOS 8或9上进行测试。