Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 20 su 20
  1. #11
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Quote Originariamente inviata da Markus85 Visualizza il messaggio
    Dovrei poi ricavare quanti elementi ci sono nella lista e poi selezionare un indice a caso .
    Con ArrayList non mi pare ci sia un metodo a riguardo.
    Dovrei utilizzare un'altra struttura?

    Come non c'è un metodo a riguardo?
    size() restituisce la dimensione dell'ArrayList (numero oggetti contenuti)
    get(int x) restituisce l'elemento in posizione "x".

    Che altro ti serve?

    Se stai cercando un metodo che restituisca un oggetto in posizione casuale, no... la posizione casuale te la devi calcolare tu.



    PS: La documentazione l'hai vista?


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  2. #12
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Excuse me

    codice:
    int size = list.size();
    DatagramPacket packet2 = list.get((int)Math.random()* size);
    HostAddress = packet2.getAddress();

  3. #13
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Ho fatto il procedimento :

    Is Correct ?

    per 5 secondi ricevo pacchetti :

    codice:
    	public ArrayList riceviPacchetti(){
    		
    		ArrayList<DatagramPacket> list = new ArrayList<DatagramPacket>();
    			try{
    				
    					Msocket.joinGroup(groupAddress);
    					Msocket.setSoTimeout(5000);
    					byte [] buf = new byte [128];
    					DatagramPacket packet = new DatagramPacket(buf , buf.length);
    					Msocket.receive(packet);
    					list.add(packet);
    				
    			}catch(Exception err){
    				err.printStackTrace();
    			}
    			return list;
    		
    	}//RICEVI PACCHETTI
    poi ricavo un pacchetto a caso dalla lista , determino l'indirizzo e spedisco la richiesta a quell'indirizzo :

    codice:
    	public static void main (String [] args){
    		
    		try{
    			InetAddress groupAddress = InetAddress.getByName("224.0.0.0");
    			int multicastPort = 5000;
    			int TCPPort = 2000;
    			
    			Client client = new Client(groupAddress , multicastPort , TCPPort);
    			client.inviaPacchettoVuoto();
    			ArrayList<DatagramPacket> lista = client.riceviPacchetti();
    			int size = lista.size();
    			DatagramPacket packet2 = lista.get((int)Math.random()* size);
    			InetAddress HAddress = packet2.getAddress();
    			client.inviaRichiesta("ciao" , HAddress);
    			
    		}catch(Exception err){
    			err.printStackTrace();
    		}
    	}

  4. #14
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Markus85 Visualizza il messaggio
    Excuse me

    codice:
    int size = list.size();
    DatagramPacket packet2 = list.get((int)Math.random()* size);
    HostAddress = packet2.getAddress();
    No, perché il cast è più prioritario del *, quindi prima fa il cast (risultato sempre 0, perché 1.0 è esclusivo per random() ).
    Metti delle parentesi in più.

    Comunque, a scanso di equivoci lo ripeto, devi avere DatagramPacket distinti, un nuovo oggetto DatagramPacket per ogni receive che fai.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #15
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Io avrei usato la classe Random... considerando che Math.random() restituisce un valore compreso fra 0 (incluso) e 1 (escluso).


    codice:
    Random r = new Random();
    int pos = r.nextInt( size );
    DatagramPacket packet2 = list.get( pos );
    ...

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #16
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Hai ragione .
    Grazie

    Ciao

  7. #17
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Comunque, a scanso di equivoci lo ripeto, devi avere DatagramPacket distinti, un nuovo oggetto DatagramPacket per ogni receive che fai.
    Mi fai un codice di esempio?

    Non capisco come fare una receive per ogni pacchetto distinto ricevuto

  8. #18
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Markus85 Visualizza il messaggio
    Mi fai un codice di esempio?

    Non capisco come fare una receive per ogni pacchetto distinto ricevuto
    Quello che avevi scritto (riporto qui):

    codice:
    byte [] buf = new byte [128];
    DatagramPacket packet = new DatagramPacket(buf , buf.length);
    Msocket.receive(packet);
    Questo sarà dentro un ciclo ... quindi per ogni receive vedi che istanzia un nuovo DatagramPacket.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #19
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Questo sarà dentro un ciclo ... quindi per ogni receive vedi che istanzia un nuovo DatagramPacket.
    Ho capito , ma come è fatto il ciclo?

    Cosi ?

    codice:
    MSocket.joinGroup(groupAddress);
    MSocket.setSoTimeout(5000);
    while(true){
    byte [] buf = new byte [128];
    DatagramPacket packet = new DatagramPacket(buf , buf.lenght);
    MSocket.receive(packet);
    list.add(packet);
    }

  10. #20
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Markus85 Visualizza il messaggio
    Ho capito , ma come è fatto il ciclo?
    Beh ma in qualche modo dovrai uscire, no? Io avevo descritto uno scenario (tutto da provare, eh!) in cui si parte con un timeout assegnato al MulticastSocket di 5 secondi e ad ogni pacchetto arrivato entro il timeout si scala di tot tempo (la durata) e si ripete il ciclo.
    Finché chiaramente il tempo di timeout non è 0 (o meno dovuto alla sottrazione) per cui ovviamente vuol dire che il tempo è esaurito.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.