Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    2

    Problema Server/Client chat multithred

    Salve ragazzi, sono nuovo di questo forum, mi prensento mi chiamo Fabio. Vi pongo il mio problema, vorrei realizzare in Java una chat multithred in grafica, sono arrivato al punto dove il server riconosce i diversi client inserendo l'indirizzo IP. Il problema e che non riesco più ad andare avanti, vorrei far comunicare(conversare) i diversi client. Mi potete dare qualche dritta per favore? grazie mille in anticipo.


    //CLASSE SERVER

    import java.io.*;
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.net.*;
    import java.util.*;


    public class Server{
    public ServerSocket server;
    public Socket connessione;
    public BufferedReader dalClient;
    public DataOutputStream alClient;
    public String chat = "\n";


    public String name;
    //sfondo e immagini
    public BackgroundedFrame bf = new BackgroundedFrame(new File("immagini/sfondo 2.jpg")); //sfondo
    //Testi
    public JTextArea conversazioneServer = new JTextArea ();
    //frame
    public JFrame f;



    public Server() {
    //************************************************** *SETTO IL FRAME********************************************* ******
    f = new JFrame("SERVER");
    f.setSize(800,545);
    f.setLocation(100,100);
    //************************************************** *SETTO LO SFONDO******************************************** *******
    bf.setLayout(null);
    bf.setSize(800,545);
    bf.setLocation(0,0);
    f.add(bf);
    //************************************************** *SETTO TEXT AREA********************************************** *****
    conversazioneServer.setSize(500,300);
    conversazioneServer.setLocation(250,50);
    conversazioneServer.setBorder(BorderFactory.create LineBorder(Color.black));
    conversazioneServer.setOpaque(false);
    conversazioneServer.setFont(new Font("Monotype Corsiva",Font.TRUETYPE_FONT,21));
    conversazioneServer.setSelectedTextColor(Color.red );
    conversazioneServer.setCaretColor(Color.red);
    conversazioneServer.setSelectionColor(Color.blue);
    conversazioneServer.setForeground(Color.black);
    bf.add(conversazioneServer);



    f.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
    f.setResizable(false);
    f.setVisible(true);
    attivazioneServer();
    }

    public void attivazioneServer(){
    try {
    ServerSocket server = new ServerSocket(1000);
    conversazioneServer.setText("La Chat multi threding ha inizio alle: " + new Date());
    while(true){
    Socket connessione = server.accept();
    InetAddress inetAddress = connessione.getInetAddress();
    conversazioneServer.append("\n"+inetAddress.getHos tName()+ "e' entrato nel server alle"+ new Date());



    }
    }
    catch(IOException ex){
    System.out.println(ex);
    }
    }


    public static void main(String[] args) {
    Server s = new Server();

    }
    }


    //CLASSE CLIENT


    import java.io.*;
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.net.*;
    import java.io.*;
    import javax.swing.filechooser.*; //chooser

    public class Client implements ActionListener{

    private Socket connessione;
    private DataInputStream dalServer;
    private DataOutputStream alServer;
    private String name;


    //sfondo e immagini
    public BackgroundedFrame bf = new BackgroundedFrame(new File("immagini/sfondo.jpg")); //sfondo
    public ImageIcon image = new ImageIcon("immagini/icona.jpg"); //immagine vuota
    public ImageIcon image1 = new ImageIcon("immagini/icona1.jpg"); //icona pulsante
    public ImageIcon image2 = new ImageIcon("immagini/icona2.jpg"); //...
    public ImageIcon image3 = new ImageIcon("immagini/icona3.jpg"); //..
    //bottoni
    public JButton attivaClient = new JButton ("Attiva CLIENT");
    public JButton sfoglia = new JButton ("");
    public BottoneTondo bt1= new BottoneTondo (""); //bottone dim testo
    public BottoneTondo bt2= new BottoneTondo (""); //bottone col testo
    public BottoneTondo bt3= new BottoneTondo (""); //bottone car testo
    //Testi
    public JTextArea conversazioneClient = new JTextArea ();
    public JTextField testoClient = new JTextField();
    //...
    public JLabel LImmagine = new JLabel (image); //immagine personale
    //chooser
    public JFileChooser scegli = new JFileChooser();
    //frame
    public JFrame f;


    public static void main(String[] args) {
    new Client();

    }


    public Client() {
    scegli.addChoosableFileFilter (new FileNameExtensionFilter ("FILE JPG", "jpg")); //filtro per i file jpg
    //************************************************** *SETTO IL FRAME********************************************* ******
    f = new JFrame("CLIENT");
    f.setSize(800,545);
    f.setLocation(100,100);
    //************************************************** *SETTO LO SFONDO******************************************** *******
    bf.setLayout(null);
    bf.setSize(800,545);
    bf.setLocation(0,0);
    f.add(bf);
    //************************************************** *SETTO TEXT AREA********************************************** *****
    conversazioneClient.setSize(500,300);
    conversazioneClient.setLocation(250,50);
    conversazioneClient.setBorder(BorderFactory.create LineBorder(Color.black));
    conversazioneClient.setOpaque(false);
    conversazioneClient.setFont(new Font("Monotype Corsiva",Font.TRUETYPE_FONT,21));
    conversazioneClient.setSelectedTextColor(Color.red );
    conversazioneClient.setCaretColor(Color.red);
    conversazioneClient.setSelectionColor(Color.blue);
    conversazioneClient.setForeground(Color.black);
    bf.add(conversazioneClient);
    //************************************************** *SETTO TEXT FIELD********************************************* ******
    testoClient.setSize(500,75);
    testoClient.setLocation(250,400);
    testoClient.setBorder(BorderFactory.createLineBord er(Color.black));
    testoClient.setBackground(Color.black);
    testoClient.setSelectedTextColor(Color.red);
    testoClient.setCaretColor(Color.red);
    testoClient.setSelectionColor(Color.blue);
    testoClient.setForeground(Color.white);
    testoClient.addActionListener(this);
    bf.add(testoClient);
    //************************************************** *SETTO I BOTTONI ************************************************** *
    //pulsante dimensione testo
    bt1.setSize(55,40);
    bt1.setLocation(550,355);
    bt1.setIcon(image1);
    bf.add(bt1);
    //pulsante colore testo
    bt2.setSize(55,40);
    bt2.setLocation(620,355);
    bt2.setIcon(image2);
    bf.add(bt2);
    //pulsante carattere testo
    bt3.setSize(55,40);
    bt3.setLocation(690,355);
    bt3.setIcon(image3);
    bf.add(bt3);
    //pulsante sfoglia
    sfoglia.setSize(20,20);
    sfoglia.setLocation(155,255);
    bf.add(sfoglia);
    sfoglia.addActionListener(this);
    //************************************************** *SETTO IMMAGINE AVATAR ************************************************** *
    LImmagine.setSize(150,230);
    LImmagine.setLocation(25,25);
    LImmagine.setBorder(BorderFactory.createLineBorder (Color.black));
    bf.add(LImmagine);


    attivazioneClient();
    f.setResizable(false);
    f.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
    f.setVisible(true);
    }

    public void attivazioneClient(){


    try{
    String indirizzoIP = JOptionPane.showInputDialog("Inserire l'indirizzo del server");
    Socket socket = new Socket (indirizzoIP, 1000);

    alServer = new DataOutputStream(socket.getOutputStream());
    dalServer = new DataInputStream(socket.getInputStream());

    }
    catch(IOException ex){
    conversazioneClient.append(ex.toString() + '\n');
    }

    }

    public void actionPerformed(ActionEvent e){
    if (e.getSource().equals(sfoglia)){
    int returnVal=scegli.showOpenDialog(f) ;
    if(returnVal == JFileChooser.APPROVE_OPTION) {
    image = new ImageIcon(scegli.getSelectedFile().getPath());
    LImmagine.setIcon(image);
    }
    if( returnVal == JFileChooser.CANCEL_OPTION ){
    JOptionPane.showMessageDialog(null, "Hai annulato la scelta");
    }
    }// serve per la scelta immagine




    }



    }

  2. #2
    Devi crearti una sorta di tuo semplice protocollo.
    Assegna un identificativo ad ogni client. Quando contatti il server, gli indichi l'identificativo così il server può sapere che ti sei loggato. Il server nel frattempo, salverà l'id, insieme agli stream di input e output (o anche il solo socket) e avrà creato un nuovo thread per gestire la comunicazione in ingresso con il client.
    Quando il client vuole inviare un messaggio a qualcuno, indica al server l'id del destinatario e il messaggio. Il server recupera lo stream di output del destinatario e gli invia il messaggio, indicandogli anche il mittente.

    Quando sviluppai qualcosa del genere, seguii una logica simile a questa.
    Ovviamente devi partire da una fase di analisi del progetto, essendoci diversi punti non banali.

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.