最近,我被赋予了在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();
}
}
我错过了什么?
答案 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%的吞吐量。