如何测量wifi局域网速度?

时间:2014-07-01 11:36:14

标签: android sockets networking speed-test

我正在尝试在同一台设备上打开发送器/接收器插槽,然后将64k数据包发送到路由器,然后再接收回来。关键是数据包应该通过路由器。所以我将能告诉用户他当地的wifi速度。这是我测试的:

    InetAddress addr = InetAddress.getLocalHost();
    datagramSocket = new DatagramSocket(SERVER_PORT, addr);
    serverPacket = new DatagramPacket(data, MAX_BUFFER_SIZE, addr, CLIENT_PORT);

    DatagramSocket clientSocket = new DatagramSocket(CLIENT_PORT, inetAddress);
    DatagramPacket packet = new DatagramPacket(data, MAX_BUFFER_SIZE);
    packet.setPort(SERVER_PORT);

    datagramSocket.send(serverPacket);
    clientSocket.receive(packet);
    clientSocket.send(packet);
    datagramSocket.receive(serverPacket);

正如我所说的数据是64k字节。但是上面的操作在2毫秒内完成!所以当我计算totalPacketSize / elapsedTime结果是巨大的!我认为套接字在设备上共享数据,永远不会去路由器。你有什么建议吗?

1 个答案:

答案 0 :(得分:0)

默认情况下,Windows会生成路由,这些路由将路由到本地接口的数据包永远不会离开PC。

我遇到的唯一解决办法就是首先转到中间地址 - 请在此处查看我的问题:Win32 sockets - Forcing ip packets to leave physical interfaces when sending to other local interfaces

所以这就是你的工作 - 在无线适配器上创建第二个IP地址分配,创建一些路由表条目以强制数据包到达无线路由器,然后从一个本地地址发送到第二个本地地址。

例如,如果我的无线适配器的地址为192.168.1.100192.168.1.101,而我的路由器为192.168.1.1,那么我将在您的Windows路由表中创建以下路由:

route add 192.168.1.101 mask 255.255.255.255 192.168.1.1

然后您的发件人套接字应bind()192.168.1.100并发送至192.168.1.101。您的接收方应绑定到192.168.1.101

发送和接收,它应该通过网络,而不是内核。

完成测试后,请删除路线:

route delete 192.168.1.101 mask 255.2555.255.255 192.168.1.1

取消分配额外的地址。

我知道这种方法有效,因为我每天都使用它,但要让它工作起来可能会很棘手。