【发布时间】:2015-05-16 09:18:27
【问题描述】:
我正在尝试在 android 中进行多播。我有三部手机(都是 Galaxy S5)。一部手机已打开 Wifi 网络共享并充当 AP(移动数据已关闭)。在其他两部电话中,一部正在发送到多播地址,另一部正在接收,两者都连接到第一部电话的 AP。发射和接收电话并排放置。 我发现在我发送的 1000 个数据包中,我只收到了大约 200 个。下面是我发送方式的概述
MulticastSocket mMulticastSocket = new MulticastSocket(port);
InetAddress multicastGrp = InetAddress.getByName("239.255.255.250");
mMulticastSocket.joinGroup(multicastGrp);
String sendStr = "";
int packetSize = 1400;
for(int i = 0; i < packetSize; i++)
sendStr = sendStr+"a";
for(int i = 0; i < 1000; i++)
mMulticastSocket.send(new DatagramPacket(sendStr.getBytes(), sendStr.getBytes().length, mMulticastSocket, port);
接收类似于,
//acquire multicast lock
byte[] buffer = new buffer[2048];
DatagramPacket rPack = new DatagramPacket(buffer, buffer.length);
mMulticastSocket.setReceiveBufferSize(1024*64);
int recvCount = 0;
while(true) {
mMulticastSocket.receive(rPack);
recvCount++;
}
//release multicast lock
发送和接收都是在工作线程中完成的。我还发现,随着“packetSize”值的减小,接收到的数据包数量正在增加。我猜这是由于 CPU 负载或接收缓冲区造成的,但无论如何,我想多播 1400 字节大小的数据包并接收尽可能多的数据(我知道接收数据包的数量是两部手机之间通道的函数但我认为将它们并排放置几乎是可以拥有的最佳渠道)。此外,当我进行 UDP 单播时,我能够接收发送的 1000 个数据包中的大约 900 个。 我无法理解为什么接收到的数据包数量对于多播来说如此之低。我错过了什么?
【问题讨论】:
-
你解锁了 WifiManager.MulticastLock 吗? developer.android.com/reference/android/net/wifi/… 也看到这个:stackoverflow.com/questions/11634942/…