Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [java] test UDP

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    19

    [java] test UDP

    ciao a tutti, devo mettere a punto un test UDP tra due client(A eB) e vedere la percentuale di pacchetti ricevuti, però ho un problema se su A mando 10 pacchetti, su B faccio un ciclo while con un contatore che fa 10 receive, però accade che A ha già mandato un paio di pacchetti quando B inizia a ricevere, cosi B mi si blocca su una receive, come potrei fare a ovviare a questo problema

    il ciclo di receive è:

    while(h<10) {
    ds.receive(dp);
    System.out.println(h);
    h++;
    contatore++; //variabile utilizzata per memorizzare il numero di pacchetti ricevuti
    }

    grazia tutti anticipatamente

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [java] test UDP

    Originariamente inviato da seibi
    però accade che A ha già mandato un paio di pacchetti quando B inizia a ricevere, cosi B mi si blocca su una receive, come potrei fare a ovviare a questo problema
    All'interno del "pacchetto" metti una informazione che indica quale pacchetto è, un ID/progressivo o altro di simile.

    Chiaramente essendo su UDP, i pacchetti possono arrivare non in ordine o addirittura non arrivare affatto. Insomma, non c'è garanzia né dell'arrivo a destinazione, né del loro ordine.
    Quindi non devi "contare" quanti ne arrivano ma andare a segnarti da qualche parte quali sono arrivati. Questo comunque non risolve il problema del ciclo, che in teoria dovrebbe continuare all'infinito. Lo risolvi gestendo un apposito timeout (si può fare, vedi setSoTimeout() di DatagramSocket). Se dopo un tot di tempo non hai ricevuto più nulla .... amen, qualcosa è andato storto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    19
    ma con setsotimeout, il timeout impostato è sulla socket o sulla chiamata "receive".... in altre parole, se metto il timeout nel ciclo ad ogni iterazione melo riazzera o una volta partito quello della prima iterazione non si resetta piu?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,325
    Originariamente inviato da seibi
    ma con setsotimeout, il timeout impostato è sulla socket o sulla chiamata "receive".... in altre parole, se metto il timeout nel ciclo ad ogni iterazione melo riazzera o una volta partito quello della prima iterazione non si resetta piu?
    E' tutto scritto bello chiaro nella documentazione ufficiale della classe DatagramSocket

    Questo è quanto riporta la documentazione di quel metodo:
    Enable/disable SO_TIMEOUT with the specified timeout, in milliseconds. With this option set to a non-zero timeout, a call to receive() for this DatagramSocket will block for only this amount of time. If the timeout expires, a java.net.SocketTimeoutException is raised, though the DatagramSocket is still valid. The option must be enabled prior to entering the blocking operation to have effect. The timeout must be > 0. A timeout of zero is interpreted as an infinite timeout.
    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

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 © 2025 vBulletin Solutions, Inc. All rights reserved.