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