Visualizzazione dei risultati da 1 a 9 su 9

Discussione: [java] Datagram socket

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    613

    [java] Datagram socket

    io ho un programma che deve instaurare n connessione con il datagram socket allora ho scritto questo codice

    ...
    for (i=0, i<n, i++){
    new Connessione (ip, port);
    }
    ...

    il problema è che invece che aprirle contemporaneamente ne apre una per volta, aspetta che sia finita poi passa alla successiva.
    Come faccio ad aprirle simultaneamente?

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    dovresti progettare questa operazione in uno scenario multithread, in cui ogni thread si occupa di un singolo socket

    comunque tieni presente che i datagram socket funzionano su udp e quindi non stabilisci alcuna connessione

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    613
    si tratta di un semplice scambio dati quindi?!

    comunque io so come funziona un server che accetta diversi client (multithread) ma per quanto riguarda l'avvio di diversi client quali classi dovrei andare a guardarmi?

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    crei una classe runnable (oppure un thread) ClientThread;

    potresti, ad esempio, mettere nel tuo ciclo for un istruzione che lancia il ClientThread, e specificare nel suo metodo run l'invio dei dati via socket

    per semplificarti il compito fai in modo di poter passare al costruttore di ClientThread quanto meno il socket da utilizzare

    se non mi sono spiegato bene dimmelo magari ti posto un esempio...pero spiega piu nel dettaglio cosa vuoi fare, e perche vuoi farlo con udp

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    613
    ho creato la classe connessione facendo così

    class connessione extends Thread{
    ..
    public void run(){
    }
    }

    e dall'altra parte

    new connessione.start();

    sembra che funga (:

    Grassie

    Adesso la domanda è:"Come faccio a far ripartire lo stesso thread all'interno di se stesso senza doverne creare uno nuovo?"

    Non so se è chiaro?!

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    non tanto

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    613
    nella classe connesisone il mio socket ha un timeout di 3 secondi
    scaduti i quali, prima della modifica, costruiva un nuovo oggetto connessione cioè:

    class connessione(parametri){

    try {
    timeout => 3 secondi
    //connessione
    }
    catch(finito il timeout){
    new connessione (parametri)
    }

    }

    questo lo faceva per venti volte usando un campo di un database come contatore.

    ora però se faccio un "new connesione (parametri).start()" non va perchè così mi si moltiplicano i thread (pur trattandosi sempre dello stesso).

    Devo evitare che si moltiplichi,è come se dovessi fareun goto alla prima riga di esecuzione per ripetere la connessione e aspettare il timeout.

    Un pò meglio?

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    scusami, e' sicuramente colpa mia, ma non riesco a capirti.

    tu hai un main. in questo main generi 20 thread.

    in cosa consiste il ciclo di vita di un singolo thread?

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    613
    Allora:

    class starter{
    public void main(){
    new Elaboradati(dati);
    }
    }

    class Elaboradati extends Thread{
    public void Elaboradati(dati){

    ... elaborazione dati...
    for (i=0; i<length; i++){
    new Connessione(ip, port).start();
    }

    }
    }


    class Connessione{

    ... vari assegnamenti...

    public void run(){
    try{
    connessione all'ip e porta specificati;
    aspetta 3 per secondi la risposta
    }
    catch(eccezione){
    se sono trascorsi i tre secondi incrementa il contatore
    dei tentativi nel database e...

    new Connessione(stesso ip, stessa port).start();

    altre operazioni
    cancella alcuni record da db
    }
    }
    }

    Questo è sbagliato perchè in connessione mi apre sempre nuovi thread mentre io voglio che ritenti di nuovo la connessione alla stessa porta e allo stesso ip sembra iniziare un nuovo thread, altrimenti si sballa tutto, dal conteggio dei timeout (incrementa contatore), che si incrementa alla scadenza del timeout di ogni thread (quindi di continuo), alle connessioni al db che non trova i record da cancellare e altri errori.
    Quando non utilizzavo il multithread questo metodo funzionava (anche se era un thread alla volta) dove a posto di

    new Connessione(stesso ip, stessa port).start();

    c'era

    new Connessione(stesso ip, stessa port);

    ora invece questo non va più per i motivi che ho detto prima. Non funziona nemmeno inserendo un destroy in questo modo

    new Connessione(stesso ip, stessa port).start();
    this.destroy;

    Ora spero sia chiaro.

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