在我的 Android 应用程序中,我必须从 Wifi 连接(UDP 和 TCP)获取数据。
这是我的 UDP 代码:
try {
// Create new UDP-Socket
socket = new DatagramSocket(SERVERPORT);
while (isRunning) {
byte[] buf = new byte[50];
DatagramPacket packet = new DatagramPacket(buf,
buf.length);
socket.receive(packet);
String str = new String(buf, 0, packet.getLength());
packet.setLength(buf.length);
Message msg = handler.obtainMessage();
Bundle b = new Bundle();
b.putString("getStr", str);
msg.setData(b);
handler.sendMessage(msg);
}
对于 TCP :
try {
s = new Socket(SERVERIP, SERVERPORT);
BufferedReader in = new BufferedReader(
new InputStreamReader(s.getInputStream()));
while (!s.isClosed()) {
String strTcp = in.readLine().toString();
Message msg = handler.obtainMessage();
Bundle b = new Bundle();
b.putString("getStr", strTcp + "\n");
msg.setData(b);
handler.sendMessage(msg);
}
它工作正常,但我的问题是:
我的 Wifi 设备发送一个数据序列(总是相同的字符串序列),当我在 TCP 中收到 1250 个字符串时,我在 UDP 中只收到 400 个字符串。UDP 通常不是比 TCP 工作得更快吗?
我在 iPhone 上尝试了相同的测试,它工作正常,UDP 获得与 TCP 一样多的值。
所以有什么问题?阻塞 UDP 函数 receive() 有问题吗?
谢谢!
编辑
我已经用不同的设备测试了代码:UDP 在三星 Galaxy Tab (Android 3.1) 上运行良好,我收到所有数据,但在其他设备 (Android 4.0) 上我只收到 1/3 的数据。
好像是硬件问题...