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




}



}