Android中的多播接收机
我尝试通过多播接收数据报。 我尝试使用Java,如下所示:Android中的多播接收机,android,Android,我尝试通过多播接收数据报。 我尝试使用Java,如下所示: class looperThread extends Thread { public void run() { try { byte[] buffer = new byte[140]; int port = 24680; String address = "224.0.0.10"; try {
class looperThread extends Thread {
public void run() {
try {
byte[] buffer = new byte[140];
int port = 24680;
String address = "224.0.0.10";
try {
socket = new MulticastSocket(port);
InetAddress add = InetAddress.getByName(address);
socket.joinGroup(add);
while (true) {
try {
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, add, port);
socket.receive(packet);
area.append("Received from " + packet.getAddress().toString() + "\n");
} catch (UnknownHostException ue) {
}
}
} catch (java.net.BindException b) {
}
} catch (IOException e) {
System.err.println(e);
}
}
}
它起作用了。
但我将代码修改为Android,如下所示。
下面的onCreate()
:
事实上,它发送几个数据报。
但它只接收一个或部分数据报。
在Java代码中,它接收所有。
我应该如何改进?我认为这可能是无线不稳定造成的。 您应该尝试将新AP更改为测试。
您的Android手机的网络接口控制器可能与AP冲突。试图排除其他问题。您的java客户端是否也无线连接到同一个无线接入点?我尝试将java客户端连接到同一个AP,它仍然接收到比Android客户端更多的数据。我使用wireshark进行监控。Java客户机接收所有数据报。但Android客户端并非如此。
Thread mClockThread = new looperThread();
mClockThread.start();
class looperThread extends Thread {
@Override
public void run() {
WifiManager wifi = (WifiManager) getSystemService(getApplicationContext().WIFI_SERVICE);
MulticastLock mLock = wifi.createMulticastLock("mylock");
mLock.acquire();
try {
byte[] buffer = new byte[140];
int port = 24680;
String address = "224.0.0.10";
try {
MulticastSocket socket = new MulticastSocket(port);
InetAddress add = InetAddress.getByName(address);
socket.joinGroup(add);
while (true) {
try {
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, add, port);
socket.receive(packet);
System.out.println("Received from " + packet.getAddress().toString() + "\n");
} catch (UnknownHostException ue) {
}
}
} catch (java.net.BindException b) {
}
} catch (IOException e) {
System.err.println(e);
}
}
}