MulticastSocket이 있고 소켓이 수신 대기중인 멀티 캐스트 그룹에 보낸 UDP (데이터 그램) 패킷을 수신하는 특정 스레드 (MulticastListenerThread)가있는 응용 프로그램을 만들고 있습니다. .Java UDP 멀티 캐스트, 패킷을 보낸 그룹 결정
이것은 작동합니다. 멀티 캐스트 그룹에 가입하여 해당 그룹에 메시지를 보내고 MulticastSocket을 통해 수신 할 수 있습니다.
그러나 수신기의 관점에서 어떤 멀티 캐스트 그룹에서 패킷을 받았는지 확인하고 싶습니다. 다음 코드는 나에게 패킷의 발신자의 주소를 제공하지 멀티 캐스트 그룹 :
DatagramPacket packet = new DatagramPacket(buf, buf.length);
mlcSenderSocket.receive(packet);
String src_addr = packet.getAddress().getHostAddress();
다음 패킷을 전송하는 코드가 될 때 :
InetAddress address = InetAddress.getByName(dest);
packet = new DatagramPacket(payload, payload.length,
address, mlcEventPort);
LLog.out(this,"[NC] MLC packet Sent to ev port MLC " + mlcEventPort
+ " and to addr " + address);
mlcSenderSocket.send(packet);
이 가능한 모든 결정에가요 어느 그룹이 패킷을 보냈습니까?
편집 :
이것은 가능하지 않은 것으로 보입니다. 성능에 미치는 영향 (IoT 장치를 위해 일하고 있음)은 멀티 캐스트 그룹 (따라서 그룹 당 리스너 스레드) 당 소켓을 할당 할 수 있습니까? 잠재적으로 많은 그룹이 합쳐질 수 있습니다 (수십 또는 수백 조의 관점에서). 실행 가능하다면 조인 된 그룹 주소를 수동으로 어딘가에 유지하고 필요할 때 참조해야합니다. 다른 해결 방법에 대한 제안을 환영합니다!
여러 개의 'MulticastSocket' 객체를 유지하려고하면 가입하려는 각 그룹에 하나씩 유지하는 것이 좋습니다. 소켓과 그룹 간의 연결을 추적하기는 쉽습니다. –
나는 그것을 생각해 보았지만 과도하게 과도하게 보였습니다. 특히 잠재적으로 많은 그룹이 참여할 수 있었기 때문에 이것은 이론적으로 제한된 IoT 장치를 의미합니다. 그런 다음 MulticastSocket 당 리스너 스레드가 있어야 할 것입니다. 뭔가하지 않는 것이 좋습니다. –