If you take it from a high level point of view, to support device to device messaging, you need to manage the actual "user list" yourself. As soon as someone connects, everyone retains a reference to them in that list. You setup a long ping just in case NetGroup fails to give you a disconnect. I had one situation where it didn't, and my code got all gnarly. Depending on a dependable ping/pong system helped me easily verify devices were in fact connected, and that each device was unique.
Second, I went with the whole send/ACK system. Every message that every device sends, whether to 1 device or many, expects an ACK back. If it does not receive an ACK back, it assumes the message failed to deliver. This made debugging very easy as I found Cocoon/NetGroup extremely reliable and my code not.
Third, once you have a sure fire way to send messages, and you can verify people are online or not, you can then start managing users. When a new person comes onto the group, you can shove them in a user list that you can iterate ping/pongs on. More importantly, though, every device has an opportunity to "bring them up to speed" as it were. Missing data, files, state, whatever. The only challenge here is you need to ensure if 3 devices offer to send a file, you need to ACK "no thank you" for 2 of them. If you're used to creating asynchronous services, this shouldn't be a challenge, but it is a pain to debug unless you have some visual thing to see what's going on on the various devices.
Fourth, once people are up to speed, and you've got a solid way to send a device 50 file offer requests with the knowledge that it'll ignore 49 of them, you can then begin the laborious process of writing code that works atop NetGroup to do that. For whatever reason the share functions did exactly what you said for me as well, and I couldn't figure out why I was getting 2 sends, etc., so I built my own file share atop the message/ACK system by sending small chunks of the file at a time. This was much more dependable, and easy to debug, it was just a ton of code.