Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    13

    Chat java che utilizza socket

    Ciao a tutti,
    sto realizzando una chat che consenta la videochiamata tra 2 utenti connessi allo stesso server.
    In pratica ho creato un server che in un thread accetta le connessioni dei client.
    Ogni client quando si connette visualizza la lista degli utenti connessi.
    Però ogni volta che un altro client si connette o si disconnette si dovrebbe aggiornare questa lista vista dai client (sul server si aggiorna perché mantengo una lista con una hashtable <nome utente, serverSocket, clientSocket>).
    Sapreste aiutarmi su come fare?
    La lista degli utenti connessi mi serve perché quando un client vuole videochiamare qualcuno digita il nome di un altro utente connesso ecc...
    (l'interfaccia grafica la farò appena funzionerà tutto).
    Grazie mille.
    Skeggy88

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Si tratta semplicemente di inviare un messaggio a tutti i client connessi ogni volta che accade qualcosa (connessione / disconnessione): nel messaggio allegherai la lista aggiornata dei client e ciascun client, quando la riceve, aggiornerà la propria copia locale.

    Dovrai strutturare bene il protocollo di comunicazione fra client e server in modo da distinguere i normali messaggi fra utenti dai messaggi amministrativi del server.


    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

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    13
    Grazie per la risposta.
    Quindi siccome l'hashtable che ha il server è sempre aggiornata, come faccio a mandarla "per intero" ai client?
    Esiste un metodo, che non sia un PrintWriter (visto che manda solo stringhe) che mi permette di farlo?
    Inoltre all'interno del client dovrei avere un thread che costantemente scorre l'hashtable e se è diversa da quella che aveva prima la sostituisce, giusto?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da Skeggy88
    Grazie per la risposta.
    Quindi siccome l'hashtable che ha il server è sempre aggiornata, come faccio a mandarla "per intero" ai client?
    Puoi serializzarla e inviarla ai client i quali dovranno usare ObjectInputStream per la lettura e ObjectOutputStream per la scrittura (come il server, del resto)... è a questo che mi riferivo quando parlavo di "Protocollo di comunicazione": dovresti avere una classe "Messaggio" che incapsula la logica di comunicazione fra client e server e che dovrebbe permettere il "trasporto delle informazioni" (messaggi, liste di utenti, comandi, ecc).

    Esiste un metodo, che non sia un PrintWriter (visto che manda solo stringhe) che mi permette di farlo?
    PrintWriter non è un metodo, ma una classe.
    Vedi sopra, puoi usare ObjectOutputStream per inviare oggetti (serializzabili).

    Inoltre all'interno del client dovrei avere un thread che costantemente scorre l'hashtable e se è diversa da quella che aveva prima la sostituisce, giusto?
    No, non è necessario: il server sa esattamente quando arriva un nuovo utente o quando uno se ne va... in quel momento, notifica tutti.


    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

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    13
    tnx

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.