import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JButton; import javax.swing.border.BevelBorder; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JLabel; import javax.swing.JTextField; import javax.swing.SwingConstants; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; public class Client extends JFrame { private static final long serialVersionUID = 1L; JPanel contentPane = new JPanel(); JPanel pnlConnection = new JPanel(); JLabel lblPort = new JLabel("Port :"); JTextField tfPort = new JTextField(); JLabel lblNomUtilisateur = new JLabel("Nom d'utilisateur :"); JTextField tfNomUtilisateur = new JTextField(); JButton btnConnection = new JButton("Connecter"); JScrollPane spMessages = new JScrollPane(); JTextArea taMessages = new JTextArea(); JPanel pnlMessage = new JPanel(); JTextField tfMessage = new JTextField(); JButton btnEnvoyer = new JButton("Envoyer"); Socket socket; BufferedReader entree; PrintWriter sortie; String message; Thread thread; public Client() { setResizable(false); setTitle("Client"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 550, 390); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); pnlConnection.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null)); pnlConnection.setBounds(0, 0, 544, 38); contentPane.add(pnlConnection); pnlConnection.setLayout(null); lblPort.setHorizontalAlignment(SwingConstants.LEFT); lblPort.setBounds(10, 11, 41, 14); pnlConnection.add(lblPort); tfPort.setText("8080"); tfPort.setColumns(10); tfPort.setBounds(44, 10, 74, 20); pnlConnection.add(tfPort); lblNomUtilisateur.setHorizontalAlignment(SwingConstants.LEFT); lblNomUtilisateur.setBounds(154, 11, 105, 14); pnlConnection.add(lblNomUtilisateur); tfNomUtilisateur.setText("Nouveau"); tfNomUtilisateur.setColumns(10); tfNomUtilisateur.setBounds(261, 10, 115, 20); pnlConnection.add(tfNomUtilisateur); btnConnection.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { try { if (btnConnection.getText().equals("Connecter")) { socket = new Socket("localhost", Integer.parseInt(tfPort.getText())); entree = new BufferedReader(new InputStreamReader(socket.getInputStream())); sortie = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()))); sortie.println(tfNomUtilisateur.getText()); sortie.println("NOUVEAU_CLIENT"); sortie.flush(); message = entree.readLine(); if (message.equals("CLIENT_ACCEPTE")) { lblPort.setEnabled(false); tfPort.setEnabled(false); lblNomUtilisateur.setEnabled(false); tfNomUtilisateur.setEnabled(false); btnConnection.setText("Déconnecter"); taMessages.setEnabled(true); tfMessage.setEnabled(true); btnEnvoyer.setEnabled(true); thread = new GestionnaireMessages(); thread.start(); } else { javax.swing.JOptionPane.showMessageDialog(null, "Ce nom est déjà utilisé."); entree.close(); sortie.close(); socket.close(); } } else { //déconnexion } } catch (Exception exception) { exception.printStackTrace(); } } }); btnConnection.setBounds(419, 9, 115, 19); pnlConnection.add(btnConnection); spMessages.setBounds(0, 38, 544, 277); contentPane.add(spMessages); taMessages.setEnabled(false); taMessages.setEditable(false); spMessages.setViewportView(taMessages); pnlMessage.setLayout(null); pnlMessage.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null)); pnlMessage.setBounds(0, 316, 544, 46); contentPane.add(pnlMessage); tfMessage.setEnabled(false); tfMessage.setColumns(10); tfMessage.setBounds(0, 0, 438, 44); pnlMessage.add(tfMessage); btnEnvoyer.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { try { if (! tfMessage.getText().isEmpty()) { sortie.println(tfNomUtilisateur.getText()); sortie.println("MESSAGE_CLIENT"); sortie.println(tfMessage.getText()); sortie.flush(); tfMessage.setText(""); } } catch (Exception exception) { exception.printStackTrace(); } } }); btnEnvoyer.setEnabled(false); btnEnvoyer.setBounds(437, 0, 107, 44); pnlMessage.add(btnEnvoyer); } public static void main(String[] args) throws Exception { new Client().setVisible(true); } class GestionnaireMessages extends Thread { public void run() { try { while (true) { message = entree.readLine(); if (message.equals("DIFFUSION_MESSAGE")) taMessages.append(entree.readLine() + '\n'); else break; } } catch(Exception exception) { exception.printStackTrace(); } } } }