Quote Originariamente inviata da Markus85 Visualizza il messaggio
uno a caso di quelli che hanno risposto nei 5 secondi
Innanzitutto tieni presente che: a) receive() è "bloccante" (attende fino alla ricezione di un datagram) e b) se in un certo momento non stai ricevendo con receive() ma arrivano dei datagram, a seconda di vari fattori, un certo numero possono essere bufferizzati e tenuti in coda.

Quindi grosso modo (non ho provato) potresti fare così. Imposti il timeout sul MulticastSocket a 5 secondi. Quindi prendi il tempo corrente in millisecondi e fai una receive. Se ricevi un datagram prima del timeout, prendi il tempo così sai quanto è durato e questa durata la scali dai 5 secondi e reimposti il timeout e così via, finché non hai un timeout o hai esaurito i 5 secondi.
Alla fine avrai N pacchetti che puoi tenere in una lista. A quel punto estrai un numero casuale 0<=x<N e ne prendi quindi uno a caso.