Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [JAVA] Problema nella creazione di una chat

    Ciao a tutti. Sto creando una chat utlizzando socket.

    Ho un server che rimane in attesa di connessioni da parte degli utenti.

    Appena qualcuno si collega, crea un thread per gestire l'utente collegato. Quindi si crea una stream tra l'utente e questo thread.

    Ho creato una semplice interfaccia grafica per l'utente. JTextField per inviare i messaggi, una JTextArea per ricevere i messaggi di tutti e un'altra per vedere i nick delle presone collegate. Lo stesso utente crea un thread per gestire i messaggi ricevuti per poi mandarli nella JTextArea.

    Se digito una stringa nella JTextField, viene inviata al thread(quello creato dal server per gestire l'utente). Adesso nasce il mio problema. Come visualizzo questa stringa su tutte le JTextArea degli utenti collegati?

    Avevo pensato alla creazione (da parte del server) di un oggetto che contenesse tutti gli utenti collegati (una sorta di variabile globale). Oggetto consultabile dal thread assegnato ad ogni client....
    Oppure la possibilità di mandare il messaggio in multicast....

    Diciamo che sono un pò incasinato anche perchè non ho molta esperienza....

    Qualcuno ha da proporre un'idea....

    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    27
    Io farei mantenere al server, nella classe principale, una lista dei client collegati, tipo un vettore di oggetti "clientData" che contengono indirizzo e porta di un client.
    Quindi poi quando un client deve mandare un messaggio, lo invia al server che poi provvede a prendere questa lista ed a inviarlo, con un ciclo, a tutti (con un metodo synchronized)
    Dovrebbe funzionare se fatta con i metodi giusti (spero)

    ciao, buon lavoro

  3. #3
    Non penso che una lista di indirizzi IP vada bene. Se il server deve mandare un messaggio a 2 utenti che si connettono dalla stessa LAN (quindi escono in internet con lo stesso indirizzo IP), come distinguo? Magari tenendo la lista dei socket....

  4. #4
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797
    io l'ho fatto per un esame. se mi mandi un pm ti invio i sorgenti.
    cmq tenevo un vector con i thread dei client a cui invare i messaggi..
    se ti invio il codice prob capisci.
    cmq c devono essere dei miei post sul forum

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    27
    come sarebbe come li distingui, chiaramente se stanno su uno stesso pc, due processi client dovranno avere due numeri di porta diversi, quindi basta mantenere l ip e il numero di porta tcp di ogni client

  6. #6
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797
    Originariamente inviato da TM-Nite
    come sarebbe come li distingui, chiaramente se stanno su uno stesso pc, due processi client dovranno avere due numeri di porta diversi, quindi basta mantenere l ip e il numero di porta tcp di ogni client
    no la porta può essere la stessa.. come fai a navigare altriemnti? passa tutto dalla porta 80 e 8080.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    La porta NON puo' essere la stessa.
    Non puoi mettere due processi diversi in ascolto sulla stessa porta.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    27
    no la porta può essere la stessa.. come fai a navigare altriemnti? passa tutto dalla porta 80 e 8080.
    Start->esegui->cmd->netstat

    sicuramente ne hai piu di una

  9. #9
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797
    Originariamente inviato da simo7784
    La porta NON puo' essere la stessa.
    Non puoi mettere due processi diversi in ascolto sulla stessa porta.
    un processo, molti thread.
    ovvio che nn ha 1000 server (processo).. ma avrà 1000 thread (di un unico processo)..

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Detto terra-terra se apri due socket settando la stessa LocalPort ti solleva una BindException che ti informa educatamente che la porta e' gia' in uso. Questo avviene sia che siano nello stesso thread che in due thread diversi.

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.