Visualizzazione dei risultati da 1 a 10 su 20

Hybrid View

  1. #1
    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
    Come faccio a mettere i pacchetti in arrivo in una lista?
    Beh, sono oggetti (DatagramPacket), quindi basta un List<DatagramPacket>. Chiaramente vanno usati DatagramPacket distinti.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Beh, sono oggetti (DatagramPacket), quindi basta un List<DatagramPacket>. Chiaramente vanno usati DatagramPacket distinti.
    Cosi?

    codice:
    ArrayList<DatagramPacket> list = new ArrayList<DatagramPacket>();
    Msocket.receive(packet);
    list.add(packet);
    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?

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

  3. #3
    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

  4. #4
    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();

  5. #5
    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

  6. #6
    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

  7. #7
    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

  8. #8
    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();
    		}
    	}

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.