1
내 앱이 브로드 캐스트 메시지를 수신 할 수 있도록 구현하려고합니다. 하나의 장치가 192.168.2.255에 메시지를 보냅니다. 나는 이것이 작동한다는 것을 Wireshark에서 볼 수 있습니다. 내 응용 프로그램은 이러한 메시지를 받아야하지만 아직 작동하지 않습니다. 이것은 내 코드입니다 :android에서 브로드 캐스트 패킷을받는 방법
int port = 3123;
// Create a socket to listen on the port.
DatagramSocket dsocket = new DatagramSocket(port);
dsocket.setBroadcast(true);
// Create a buffer to read datagrams into. If a
// packet is larger than this buffer, the
// excess will simply be discarded!
byte[] buffer = new byte[1024];
// Create a packet to receive data into the buffer
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
// Now loop forever, waiting to receive packets and printing them.
while (true) {
// Wait to receive a datagram
dsocket.receive(packet);
// Convert the contents to a string, and display them
String msg = new String(buffer, 0, packet.getLength());
System.out.println(packet.getAddress().getHostName() + ": " + msg);
// Reset the length of the packet before reusing it.
packet.setLength(buffer.length);
res = msg;
Log.d("mainGate_bc", res);
}
} catch (Exception e) {
System.err.println(e);
}
프로그램이 dsocket.receive (packet) 행에 고정되어 있습니다. 다른 장치가 패킷을 보내는 동안 앱에 아무 것도 도착하지 않습니다.
이 권한은 시도 :
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
어떤 생각이 왜 작동하지 않는 이유는 무엇입니까? 추가 권한? Android 기기의 설정은 무엇인가요?
감사하지만 같은 결과 :
그래서 다음과 같은 코드가 필요합니다. – user3137385
코드가'receive()'에 대한 블로킹 호출을 극복합니까? 그렇지 않다면주기적인 인터럽트를 만들기 위해 [여기]를보십시오 (http://stackoverflow.com/questions/40055175/how-to-interrupt-a-blocking-call-to-udp-sockets-receive/40055466#40055466). 차단 통화. – Onik
그렇지 않습니다. 그러나 나는 또한 수신을 방해하고 싶지 않습니다. 내 앱에 도착하지 않는 기존 메시지를 받고 싶습니다. – user3137385