Android Wifi带宽

时间:2013-02-24 05:40:30

标签: java android android-wifi

最近,我被赋予了在Nexus 7平板电脑上开发Android应用程序的任务,该应用程序将通过使用wifi的tcp套接字连接到PC。

特别是我必须将图像流(例如未压缩的BMP)传递给平板电脑。所以我做了一个简单的测试来检查带宽,并对结果感到失望。我正在使用我的平板电脑就在wifi信号源前面,它写的连接速度是每秒54Mb,但考虑到测试结果,我每秒只能得到~16Mb。

测试代码:

PC:

    public static void main(String[] args) throws Exception 
    {
        Socket socket = new Socket(androidIpAddr, port);

        OutputStream output = socket.getOutputStream();

        byte[] bytes = new byte[1024 * 100]; // 10K
        for (int i = 0; i < bytes.length; i++) {
            bytes[i] = 12;
        } // fill the bytes

        // send them again and again
        while (true) {
            output.write(bytes);
        }
     }

机器人:

public class MyActivity extends Activity {
/**
 * Called when the activity is first created.
 */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);       

    new Thread(new Runnable() 
      {
        public void run() 
         {
           ServerSocket server = new ServerSocket(port);
           Socket socket = server.accept();

           InputStream input = socket.getInputStream();
           long total = 0;
           long start = System.currentTimeMillis();

           byte[] bytes = new byte[1024 * 100]; // 10K

           // read the data again and again
           while (true) 
           {
             int read = input.read(bytes);
             total += read;
             long cost = System.currentTimeMillis() - start;
             if (cost > 100) 
             {
               double megaBytes = (total / (1024.0 * 1024));
               double seconds = (cost / 1000.0);

               System.out.println("Read " + total + " bytes, speed: " + megaBytes / seconds + " MB/s");
               start = System.currentTimeMillis();
               total = 0;
             }
           }                
        }
    }).start();

}

}

我错过了什么?

1 个答案:

答案 0 :(得分:1)

好的,第一个54Mbps的Wifi是每秒54 x 1024 x 1024 。所以最大6.75 MB / s。

我在我的网络上进行了实验,在我的Windows 7框中报告为54 Mbps。在我的Windows 7盒子(服务器)和XP盒子(客户端)之间,我基本上使用上面的代码达到了3.0 MB / s。

然后我在Nexus 7(服务器)和XP(客户端)之间运行相同的代码并获得0.3 MB / s。因此速度显着下降。我将以下内容放在服务器线程的构造函数中:

android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);

并在MANIFEST:

<uses-permission android:name="android.permission.RAISED_THREAD_PRIORITY"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

我也在路由器附近移动并关闭了wifi然后重新开启。它报告Nexus 7为54Mbps,当我运行它时我得到3.0 MB / s。

因此,此时Windows 7的结果与理论网络吞吐量的44%相同。

使用多个TCP连接可以让我们接近100%的吞吐量。