domenica 21 marzo 2010

Spiegazione esercizio svolto in precedenza.

// Al solito, si importano inizialmente le varie librerie per sfruttarne i metodi
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.*;
//definiamo la classe cliente
public class Client {
//definiamo un "carrello" dove raccoglieremo i dati di tipo lettore
BufferedReader lettore;
//criamo il collegamento nella rete definendo una "presa" sock
Socket sock;
// Utilizzato per scrivere stringhe di carattere
PrintWriter scrittore;
//Definiamo grafica e scorrimento
JTextField t1=new JTextField(20);
JTextArea a1=new JTextArea(20,50);
JScrollPane scrollPane;
//Creiamo la finestra aggiungendo i vari elementi e qualche comoda istruzione
public void finestra(){
JFrame f1=new JFrame("semplice chat");
f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p1=new JPanel();
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);
// Per ogni cliente creiamo a un thread-programmazione in parallelo
Thread tt=new Thread(new InArrivoDalServer());
creaCollegamento();
tt.start();
}
//Creiamo una classe interna che eredita i metodi di ActionListener
public class InviaMessaggio implements ActionListener{
public void actionPerformed(ActionEvent e){
//Per le istruzioni a rischio utilizzo try-catch (?)
try{
scrittore.write(t1.getText());
scrittore.println(t1.getText());
//Riazzera il metodo
scrittore.flush();
}catch(Exception ex){ex.printStackTrace();}
t1.setText("");
}
}
//Crea il collegamento tutto all'interno della try-catch
public void creaCollegamento(){
try{
//Cao un collegamento socket con il server
sock=new Socket("192.168.3.18",4242);
//Crea un raccoglitore BufferedReader,
//creiamo un InputStreamReader collegato all'InputStream di basso livello del socket
lettore= new BufferedReader(new InputStreamReader(sock.getInputStream()));
scrittore= new PrintWriter(sock.getOutputStream());
System.out.println("collegamento stabilito");
}catch(Exception ex){
ex.printStackTrace();
}
}
public class InArrivoDalServer implements Runnable{
//Iiterazione continua che legge dal cliente e rispedisce a tutti il messaggio
public void run(){
String messaggio;
try{
while((messaggio=lettore.readLine())!= null){
a1.setText(messaggio);
System.out.println("leggo il messaggio:"+messaggio);
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}
//Mandiamo infine tutto in esecuzione tramite la main
public static void main(String[]args){
Client cc=new Client();
cc.finestra();
}
}


Dove avevo dubbi sono andato a vedere il post di Luigi Marzocchella.