Chat in java

Server

import java.io.*;
import java.net.*;
import java.util.*;
public class ServerSemplice {
    PrintWriter[] clienti=new PrintWriter[20];
    public class ElaboraCliente implements Runnable{
        BufferedReader lettore=null;
        Socket sock=null;
        //creo lo Stream di input
        public ElaboraCliente(Socket c){
            try{
            sock=c;
            lettore=new BufferedReader(new InputStreamReader(sock.getInputStream()));
            }catch(Exception ex){
                ex.printStackTrace();
            }
        }
        @Override public void run(){
            String messaggio;
            try{
            while((messaggio=lettore.readLine())!=null){
                System.out.println("ho letto: "+messaggio);
                InetAddress indirizzo=sock.getInetAddress();
                String ind=indirizzo.toString();
                String m=ind+" "+messaggio;
                chiacchierone(m);
                }
            }catch(Exception ex){
                ex.printStackTrace();
            }
        }
    }
    public void go(){
        try{
            //portone di ascolto
            ServerSocket portone=new ServerSocket(4242);
            int i=0;
            while(true){
                //creo il collegamento con il cliente che ha bussato al portone
                Socket portina=portone.accept();
                //creo lo stream per scrivere i messaggi al cliente
                PrintWriter scrittore=new PrintWriter(portina.getOutputStream());
                //salvo in un array questo stream di output
                clienti[i]=scrittore;
                i++;
                //........
                //creo uno stream di input per quel cliente e mi metto a ricevere i suoi messaggi
                //spedisco il messaggio ricevuto a tutti i client
                Thread t=new Thread(new ElaboraCliente(portina));
                t.start();
                }
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }
    public void chiacchierone(String messaggio){
    for(int i=0;i<20;i++){
        if(clienti[i]!=null){
            try{
            clienti[i].println(messaggio);
            clienti[i].flush();
            System.out.println("Ho spedito il messaggio");
            }catch(Exception ex){
                ex.printStackTrace();
            }
        }
    }
}
    public static void main(String args[]){
        ServerSemplice s=new ServerSemplice();
        s.go();
    }
}

 

Client

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.*;
public class Client {
    BufferedReader lettore;
    Socket sock;
    PrintWriter scrittore;
    JTextField t1;
    JTextArea a1;
    JScrollPane scrollPane;
    public void finestra(){
      JFrame f1=new JFrame("semplice chat");
      f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      JPanel p1=new JPanel();
      a1=new JTextArea(20,50);
      t1=new JTextField(200);
      JButton b1=new JButton("invia il messaggio");    
      p1.setLayout(new GridLayout(3,1));
      scrollPane= new JScrollPane(a1);
      p1.add(scrollPane, BorderLayout.CENTER);
      p1.add(t1);
      p1.add(b1);
      b1.addActionListener(new InviaMessaggio());
      f1.add(p1);
      f1.setSize(500,500);
      f1.setVisible(true);
      Thread tt=new Thread(new InarrivoDalServer());
      creaCollegamento();
      tt.start();
    }
    public void creaCollegamento(){
  try{
    sock=new Socket("192.168.3.18",4242);
    lettore=new BufferedReader(new InputStreamReader(sock.getInputStream()));
    scrittore=new PrintWriter(sock.getOutputStream());
    System.out.println("Collegamento stabilito");
  }catch(Exception ex){
    ex.printStackTrace();
  }
}
      public class InviaMessaggio implements ActionListener{
      public void actionPerformed (ActionEvent e){
        try{
          scrittore.write(t1.getText());
          scrittore.println(t1.getText());
          scrittore.flush(); //azzera il contenuto in maniera da non rispedire lo stesso messaggio
        }catch(Exception ex){
          ex.printStackTrace();
        }
        t1.setText("");
      }
    }
      public class InarrivoDalServer implements Runnable{
        public void run(){
            String messaggio;
            try{
              while((messaggio=lettore.readLine())!=null){
                a1.append(messaggio+"\n");
                System.out.println("leggo il messaggio: "+messaggio);
              }
            }catch(Exception ex){
              ex.printStackTrace();
            }
        }
}
      public static void main(String args[]){
          Client cc=new Client();
          cc.finestra();
      }
}

Commenti