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
Posta un commento