Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Java chat

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    107

    Java chat

    Salve a tutti, devo realizzare una chat in java, ma non ho idea da dove iniziare, so che devo creare un client ed un server, ma come li metto poi in comunicazione tra di loro?

    Fatto questo come si crea un applet che richiama la chat appena creata?

    grazie per l'aiuto

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: Java chat

    Originariamente inviato da marshall86
    ma come li metto poi in comunicazione tra di loro?
    Dai un'occhiata alle classi Socket e ServerSocket del package java.net.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    107
    Ho questo client:

    codice:
    import java.net.*;
    import java.io.*;
    /**
     * Classe che implementa l'invio e la ricezione dei messaggi
     * @author 
     * @version 1.0
     * 
     */
    public class ClientChat
    {
       private OutputStream os;
       private InputStream is;
       private Socket s;
       private boolean close=true;
       
       /**
        * Metodo che mi permette di ricevere l'url da cui mi sono connesso
        * per evitare di immetere l'indirizzo del server
        * 
        * @param u l'url di ricezione
        */
       
       public static void main(String args[]){    //QUI AVVIO IL SERVER ATTRAVERSO IL METODO START()
          ClientChat clientChat = new ClientChat();
          try
          {
             clientChat.start();    
          }
          catch (Exception ex) 
          {
             ex.printStackTrace();
          }
            
        }
       
       public void start() throws UnknownHostException,IOException
       {
          //Connessione della Socket con il Server
          Socket s= new Socket();
          s.connect(new InetSocketAddress("192.168.1.177", 7777));
          
          //Stream di byte da passare al Socket
          InputStream is = s.getInputStream();
          OutputStream os=s.getOutputStream();
          close=false;
          //}catch(Exception e){}
       }
       
       /**
        * Metodo per l'invio del messaggio
        * 
        * @param strMessage Testo contenente il messaggio
        */
       public void sendMessage(String strMessage) throws IOException
       {       
          os.write(strMessage.getBytes());
       }
       
       /**
        * Metodo per la ricezione del messaggio
        * 
        * @return restituisce il messaggio appena ricevuto
        */
    
       public void receiveMessage() throws IOException
       {
          is.read();
       }
       
       /**
        * Metodo che chiude tutti gli oggetti di tipo stream e la Socket
        */
       public void close() throws IOException
       {
          os.close();
          is.close();
          s.close();
          close=true;
       }
       
       /**
        * Metodo che ritorna il valore della variabile close
        * 
        * @return valore della variabile booleana
        */
       public boolean isClosed()
       {
           return close;
       }
    }
    e questo server:

    codice:
    import java.net.*;
    import java.io.*;
    import java.util.ArrayList;
    /**
     * Questa classe ? il vero e proprio server,
     * accetta le connessioni dai client e comunica 
     * 
     * @author 
     * @version 1.0
     */
    
    public class ServerChat
    {
        public static void main(String args[]){    //QUI AVVIO IL SERVER ATTRAVERSO IL METODO START()
            ServerChat serverChat = new ServerChat();
          try
          {
             serverChat.start();    
          }
          catch (Exception ex) 
          {
             ex.printStackTrace();
          }
            
        }
    
       private ServerSocket serverSocket;
       int clientPort;
       private static ArrayList<Socket> clients;
       private static ArrayList<String> nicks;
       
       /**
        * Metodo che avvia il server ed inizializza tutte le variabili
        */
       public void start() throws IOException
       {
          clients = new ArrayList();
          nicks = new ArrayList();
          Socket client;
          serverSocket = new ServerSocket(7777);
          getServerInfo();
    
          //ciclo infinito in ascolto di client
          while (true)
          {
             client = startListening(); 
             clients.add(client);//aggiunge alla lista "clients" eventuali client
             getClientInfo(client); //ottiene info sul client attraverso il relativo metodo
             
             //creo un thread per ogni client connesso
             startListeningClient(client);            
          }
       }
    
       /**
        * Metodo che rimane in ascolto di eventuali connessioni
        * @return ritorna la socket di connessione del client
        */
       public Socket startListening() throws IOException{
            System.out.println("In attesa di connessioni...");
            return serverSocket.accept();//il server resta in ascolto sulla porta specificata
        }
        
        /**
         * Metodo che permette di visualizzare le informazioni relative al server
         */
        public void getServerInfo()
       {
          // Informazioni sul Server in ascolto
          InetAddress indirizzo = serverSocket.getInetAddress(); //effettua il dns( traduce gli indirizzi numerici in nome,quando possibile)
          String server = indirizzo.getHostAddress(); //Restituisce il nome dell'host che corrisponde all'indirizzo IP dell'InetAddress(indirizzo) - se non viene
                                                      //trovato un nome viene restituito l'indirizzo ip numerico
          int port = serverSocket.getLocalPort(); //restituisce il numero della porta del server
          System.out.println("In ascolto Server: " + server + " porta: " + port);
       }
       
        /**
         * Metodo che permette di visualizzare le informazioni relative
         * del client connesso
         * 
         * @param client socket del client dalla quale estrarre estrarre le informazioni
         */
       public void getClientInfo(Socket client)
       {
          // Informazioni sul client che ha effettuato la connesione
          InetAddress address = client.getInetAddress();
          String clientInfo = address.getHostName();
          clientPort = client.getPort();
          System.out.println("In connessione Client: " + clientInfo + " porta: "+ clientPort);   
        }
        /**
        * Creazione del thread per la ricezione dei messaggi
        * 
        * @param client Socket del client appena connesso
        */
       private void startListeningClient(Socket client){
            Thread t=new Thread(new ListeningThread(client));
            t.start();
        }
        /**
         * Metodo per il controllo dell'esistenza di un nickname
         * in caso contrario viene accettato il nickname inserito
         * ed iscritto il nuovo client
         * 
         * @param username il nick del client appena connesso
         */
        public static synchronized boolean checkUserNicks(String username)
        {
            boolean exist=nicks.contains(username);
            if(!exist)
            {
                nicks.add(username);
                
            }
            return exist;
        }
        /**
         * Controllo dell'esistenza di un utente in modo da poter inoltrare il messaggio
         * 
         * @param username il nick da controllare
         * @return valore booleano sull'esistenza di un determinato username
         */
        public static boolean checkUser(String username)
        {
            return nicks.contains(username);
        }
        /**
         * Metodo che ricerca la Socket di connessione del nick che vogliamo
         * 
         * @param nick il nick name di cui si vuole trovare la socket
         * @return la socket dello specifico client
         */
        public static Socket getSocketClient(String nick)
        {
            return clients.get(nicks.indexOf(nick));
        }
        
        /**
         * recupero tutti i client connessi
         * 
         * @return i nick name di tutti i client connessi
         */
        public static String getAllClient()
        {
            String allClient="";
            for (int i = 0; i < nicks.size(); i++)
            {
               allClient+="~"+nicks.get(i);
            }
            return allClient;
        }
        
        /**
         * Metodo per rimuovere un client che si ? disconnesso
         * 
         * @param nick il nick name del client da disconnettere
         */
        public static synchronized void disconnectClient(String nick) throws IOException
        {
            int indexToRemove=nicks.indexOf(nick);
            nicks.remove(indexToRemove);
            clients.remove(indexToRemove);
        }
        
        /**
         * Metodo che restituisce l' arraylist dei client
         */
        public static ArrayList getAllSocketClient()
        {
            return clients;
        }
        /**
         * Metodo che elimina l'ultimo client connesso
         */
        public static synchronized void deleteLastClient()
        {
            clients.remove((clients.size()-1));
        }
    }//end class
    possono andare? c'è qualcosa di sbagliato? lanciandoli non riesco a capirlo

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da marshall86
    c'è qualcosa di sbagliato?
    Sì: non hai usato i tag CODE per il codice, come espressamente richiesto dal Regolamento interno (Vedi punto 6).

    Sistemo io questa discussione. In futuro pensaci tu.


    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
    direi che adesso sei pronto per scrivere un troian.

    si si direi proprio di si
    SCJP 96%

    Sono io signore che non ti perdono,io non merito punizioni, io sono potentissimo e ora che ho visto il tuo volto merito di stare in un cielo alto più alto del tuo perché non capendo chi è l’uomo hai dimostrato di essermi inferiore,tu servirai me. Da oggi mi chiamerò Satan che significa l’Avversario.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    107
    ancora mi manca la conoscenza di qualcosa..

    non riesco a creare una finestra fatta in questo modo

    un pannello dove sono scritti i messaggi ricevuti ed inviati
    sotto un pannello dove scrivere
    accanto a questi un pannello con il listato di tutti gli utenti

    stile msn per intenderci

    ne ho creata una ma i 3 pannelli di cui sopra sono messi tutti in posizione scorretta e non riesco a cambiarla.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    107
    problema risolto
    Immagini allegate Immagini allegate

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    107
    qualcuno sa dirmi come posso fare a mettere al posto degli item nella sezione a destra della finestra che c'è nell'immagine l'elenco degli utenti connessi ?

    ho fatto questa cosa siccome volevo dargli un'interfaccia che mi piaceva di più ho creato una finestra di benvenuto e al clic parte poi una finestra di login da cui si apre la finestra dell'immagine

    però non so come far apparire il nome utente in quella parte che ho detto,consigli?

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    La discussione parla di una chat (quindi problemi di comunicazione client/server). L'interfaccia grafica è una cosa a parte e i problemi relativi (che non sono per forza legati a questa tipologia di programma, ma sono generici per qualunque tipo di programma che richieda una GUI) vanno trattati in una discussione a se stante. Questo perchè ciascuna discussione deve parlare specificatamente di uno ed un solo problema.

    Apri una nuova discussione per parlare di problemi specifici con controlli per GUI; qui si parla di aspetti tecnici legati alla comunicazione Client/Server, senza considerare la seconda domanda.

    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

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    107
    come devo impostare la connessione per poter testare il client su un altro pc che è presenta nella rete di casa mia?

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.