gpt4 book ai didi

java - Android Wifi 带宽

转载 作者:行者123 更新时间:2023-11-30 03:45:42 26 4
gpt4 key购买 nike

最近我接到了一项任务,要在 Nexus 7 平板电脑上开发 Android 应用程序,该应用程序将使用 wifi 通过 tcp 套接字与电脑连接。

特别是我必须将图像流(例如未压缩的 BMP)传递给平板电脑。所以我做了简单的测试来检查带宽,结果让我很失望。我把我的平板电脑放在 wifi 信号源前面,上面写着连接速度是每秒 54Mb,但考虑到测试结果,我只能得到每秒约 16Mb。

测试代码:

电脑:

    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();

}

我错过了什么?

最佳答案

好的,第一个 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);

在 list 中:

<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% 的吞吐量。

关于java - Android Wifi 带宽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15049030/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com