In the thread's run method, the same byte buffer is being used for each DatagramPacket created. So the data returned from receive method can contain extra text, which throws of the set of host strings. So hosts will show up more than once in the output of the validate multicast tool.
Simple fix is just to create a new byte array for each packet (or clear the old one). Without this fix, the tool still gives accurate results – it can just include extra copies of previous entries. I have a GF issue filed for integration, and this one for the actual fix.