0
我试图通过多播接收数据报。 我尝试使用Java如下:Android中的多播接收器
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()
:
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);
}
}
}
事实上,它发送多个数据包。 但它只接收一个或部分数据报。 而在Java代码中,它收到全部。 我该如何改进?
试图排除其他问题。 您的java客户端是否以无线方式连接到同一无线接入点? – rjt 2011-12-27 08:17:20
我尝试连接到同一个AP的Java客户端,它仍然收到比Android客户端更多的东西。 – brian 2011-12-27 09:18:32
我使用wireshark进行监控。 Java客户端接收所有数据报。但Android客户端不是。 – brian 2011-12-27 09:22:46