mercoledì 24 marzo 2010

Compito in classe del 24-3-10

Si inserisca nella chat client-server semplice il "gioco dell'oca" dove mostrare, nascondere le posizioni nel gioco e a scelta casuale del cliente tramite un tasto si abbia un "cerchietto" in una parte del gioco.


import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import java.awt.*;
public class Compito extends JPanel{
Color colore1=Color.YELLOW;
Color colore2=Color.RED;
String numero="";
String n="";
int y;
int z;
int[][]coord={{110, 80},{150, 100},{170, 130},{170, 170},{150, 210},{115, 230},
{80, 230},{40, 210},{10, 170},{10, 130},{30, 100},{70,80}};
public void setColore1(Color c1){
colore1=c1;
}

public void setColore2(Color c2){
colore2= c2;
}
public void paintComponent(Graphics g){
g.setColor(colore1);
g.fillOval(0,50,200,200);
g.setColor(colore2);
g.fillOval(50,100,100,100);
g.drawLine(100,250,100,50);
g.drawLine(0,150,200,150);
g.drawLine(10,200,190,100);
g.drawLine(10,100,190,200);
g.drawLine(50,60,150,240);
g.drawLine(50,240,150,60);
int j;
for(int i=0;i<12;i++){
j=i+1;
n=numero+j;
g.drawString(n,coord[i][0],coord[i][1]);
if(i==y){
g.fillOval(coord[i][0]+5,coord[i][1],10,10);
}
if(z==1){
g.fillOval(coord[i][0]+5,coord[i][1],10,10);
}
}
z=0;
g.setColor(colore2);

}
public int getY(int b){
y=b;
System.out.print(b);
return y;
}
public int nascondiPedine(int c){
y=c;
return y;
}
public int mostraPedine(){
z=1;
return z;
}


}



import java.io.*;
import java.net.*;
public class ServerSeplice {
public void go(){
try{
ServerSocket s1=new ServerSocket(12);//mi creo una porta di ascolto
while(true){ //quando qualcuno chiede di entrare creo un collegamento diretto tra server e client
Socket presa=s1.accept(); //il socket è una presa
//trasmissione dei dati al client:
PrintWriter scrivi=new PrintWriter(presa.getOutputStream());//classe che invia i dati nel collegamento virtuale
int s=getSuggerimenti();
scrivi.println(s);//manda nel canale la stringa s
scrivi.close();
System.out.println(s);
}
}
catch(IOException ex){
ex.printStackTrace();
}

}
private int getSuggerimenti(){
double r1=Math.random()*12;
int r=(int)r1;
return r;
}
public static void main(String args[]){
ServerSeplice serv=new ServerSeplice();
serv.go();
}
}



import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import java.awt.*;
public class TestaCompito {
int y;
BufferedReader lettore;
Socket sock;
PrintWriter scrittore;
JFrame f1=new JFrame("disegno1");
Compito d1=new Compito();
JButton b=new JButton("Ricevi");
JPanel p1=new JPanel();
JButton nascondiPedine=new JButton("Nascondi tutte le pedine");
JButton mostraPedine=new JButton("Mostra tutte le pedine");
JTextField t1;
JTextArea a1;
JScrollPane scrollPane;
public TestaCompito(){
f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
d1.setColore1(Color.YELLOW);
d1.setColore2(Color.BLUE);
f1.add(BorderLayout.SOUTH,b);
b.addActionListener(new RiceviMessaggi());
JFrame f1=new JFrame("Chat gioco");
f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
a1=new JTextArea(20,50);
t1=new JTextField(200);
JButton b1=new JButton("invia messaggio");
b.addActionListener(new RiceviMessaggi());
nascondiPedine.addActionListener(new NascondiPedine());
p1.setLayout(new GridLayout(4,2));
scrollPane= new JScrollPane(a1);

p1.add(scrollPane, BorderLayout.CENTER);
p1.add(t1);
p1.add(b1);
p1.add(b);
p1.add(nascondiPedine);
p1.add(BorderLayout.SOUTH,d1);
f1.add(p1);
p1.add(mostraPedine);
mostraPedine.addActionListener(new MostraPedine());
f1.pack();
f1.setVisible(true);
}
public class RiceviMessaggi implements ActionListener{
public void actionPerformed(ActionEvent e){
go();
p1.repaint();
}
}
public class NascondiPedine implements ActionListener{
public void actionPerformed(ActionEvent e){
d1.nascondiPedine(33);
p1.repaint();
}
}
public class MostraPedine implements ActionListener{
public void actionPerformed(ActionEvent e){
d1.mostraPedine();
p1.repaint();
}
}

public void go(){
try{
for(int i=0;i<1;i++){
Socket s=new Socket("localhost",12);
InputStreamReader r=new InputStreamReader(s.getInputStream());
BufferedReader reader=new BufferedReader(r);
String suggerimento=reader.readLine();
System.out.println("Suggerimento: "+suggerimento);
y=Integer.parseInt(suggerimento);
d1.getY(y);
reader.close();
}
}catch(IOException ex){
ex.printStackTrace();
}
}
public static void main(String[]args){
TestaCompito d=new TestaCompito();
}
}

lunedì 15 marzo 2010

Grafica in java-esercizio svolto in classe-modifica con aggiunta di "numeri"-risolto problema

Si disegnino due cerchi sovrapposti di diverso colore e dimensione e poi si faccia la costruzione dei diametri del cerchio più ampio.


import javax.swing.*;
import java.awt.*;
public class DueCerchi extends JPanel{
Color colore1=Color.YELLOW;
Color colore2=Color.RED;
public void setColore1(Color c1){
colore1=c1;
}
public void setColore2(Color c2){
colore2= c2;
}
public void paintComponent(Graphics g){
g.setColor(colore1);
g.fillOval(100,150,200,200);
//x1,y1,x2,y2
//(x,y,w,h)
g.setColor(colore2);
g.fillOval(150,200,100,100);
g.drawLine(200,350,200,150);
g.drawLine(100,250,300,250);
g.drawLine(110,300,290,200);
g.drawLine(110,200,290,300);
g.drawLine(150,160,250,340);
g.drawLine(150,340,250,160);
g.drawString("1", 210, 180);
g.drawString("2", 250, 200);
g.drawString("3", 280, 240);
g.drawString("4", 280, 280);
g.drawString("5", 250, 320);
g.drawString("6", 210, 340);
g.drawString("7", 170, 330);
g.drawString("8", 140, 310);
g.drawString("9", 110, 270);
g.drawString("10", 110, 230);
g.drawString("11", 130, 200);
g.drawString("12", 170, 180);
//(x,y,w,h)
g.setColor(colore2);
g.fillOval(150,200,100,100);

}
}



import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class TestaDueCerchi {
JFrame f1=new JFrame("disegno1");
DueCerchi d1=new DueCerchi();
public TestaDueCerchi(){
f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f1.add(BorderLayout.CENTER,d1);
d1.setColore1(Color.YELLOW);
d1.setColore2(Color.BLUE);
//sceglie lui le dimensioni più appropiate
f1.setSize(400,600);
f1.setVisible(true);
}
public static void main(String[]args){
TestaDueCerchi d=new TestaDueCerchi();
}
}


domenica 14 marzo 2010

Client-Server: esercizio svolto in classe tempo fa ma includendo la spiegazione delle istruzioni

// importo le librerie per utilizzare i loro metodi
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.*;
//definisco la classe cliente
public class Client {
//definisco un "carrello" dove raccolgo i dati di nome lettore
BufferedReader lettore;
//creo il collegamento nella rete definendo una "presa" sock
Socket sock;
// per scrivere stringhe di carattere
PrintWriter scrittore;
//definisco la grafica e lo scorrimento
JTextField t1=new JTextField(20);
JTextArea a1=new JTextArea(20,50);
JScrollPane scrollPane;
//creo la finestra con le sue parti
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 si crea un thread-programmazione in parallelo
Thread tt=new Thread(new InArrivoDalServer());
creaCollegamento();
tt.start();
}
//creo una classe interna che ereditano 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());
//per riazzerare il metodo
scrittore.flush();
}catch(Exception ex){ex.printStackTrace();}
t1.setText("");
}
}
//creo il collegamento tutto all'interno della try-catch
public void creaCollegamento(){
try{
//creo un collegamento socket con il server
sock=new Socket("192.168.3.18",4242);
//creo un raccoglitore BufferedReader,
//faccio 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{
//iterazione 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();
}
}
}
//mando tutto in esecuzione tramite la main
public static void main(String[]args){
Client cc=new Client();
cc.finestra();
}
}



// importo le librerie per utilizzare i loro metodi
import java.io.*;
import java.net.*;
import java.util.*;
//definisco la classe ServerSemplice
public class ServerSemplice {
//creo uno stream che è in grado di scrivere stringhe di caratteri,
//poichè nella rete viaggiano i byte
PrintWriter[] clienti=new PrintWriter[20];
public class ElaboraCliente implements Runnable{
BufferedReader lettore=null;
//definisco la presa "sock"
Socket sock=null;
//creo lo Stream di input
public ElaboraCliente(Socket c){
//inserisco la try-catch
try{
sock=c;
//creo un raccoglitore BufferedReader,
//faccio un InputStreamReader collegato all'InputStream di basso livello del socket
lettore=new BufferedReader(new InputStreamReader(sock.getInputStream()));
}catch(Exception ex){
ex.printStackTrace();
}
}
//iterazione continua che legge dal cliente e rispedisce i messaggi a tutti
@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(messaggio);
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}
//per riceve i messaggi
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, collegamento vero
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();
}
}
//per inviare i messaggi
public void chiacchierone(String messaggio){
for(int i=0;i<20;i++){
if(clienti[i]!=null){
try{
//array di oggetti
clienti[i].println(messaggio);
//per riazzerare il metodo
clienti[i].flush();
}catch(Exception ex){
ex.printStackTrace();
}
}
}
}
//mando il tutto nella main
public static void main(String args[]){
ServerSemplice s=new ServerSemplice();
s.go();
}
}

giovedì 11 marzo 2010

Stream con l'aggiunta di grafica

Conseguimento dell'esercizio relativo agli stream precedentemente pubblicato con l'aggiunta della grafica e di alcune piccole modifiche al programma.



import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.io.FileNotFoundException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class LeggiScriviStream {
JFrame f1=new JFrame("Scrivi");
JButton b1= new JButton("scrivi");
JLabel l1=new JLabel("nome");
JTextField t1=new JTextField();
JLabel l2=new JLabel("cognome");
JTextField t2=new JTextField();
JLabel l3=new JLabel("data");
JTextField t3=new JTextField();
JLabel l4=new JLabel("posta elettronica");
JTextField t4=new JTextField();
JLabel l5=new JLabel("telefono");
JTextField t5=new JTextField();
JPanel p1=new JPanel();
public LeggiScriviStream(){
f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f1.setLayout(new GridLayout(11,1));
f1.add(l1);
f1.add(t1);
f1.add(l2);
f1.add(t2);
f1.add(l3);
f1.add(t3);
f1.add(l4);
f1.add(t4);
f1.add(l5);
f1.add(t5);
f1.add(b1);
b1.addActionListener(new Scrivi());
//sceglie lui le dimensioni più appropiate
f1.setSize(400,600);
f1.setVisible(true);

}
class Scrivi implements ActionListener{
public void actionPerformed(ActionEvent e){
try{
writeInfo("rubrica.txt");
}
catch(IOException ioe){
System.out.println("Errore in fase di chiusura dello stream");
System.out.println(ioe.getMessage());
}
}
}
private void writeInfo(String fileName) throws IOException{
FileOutputStream fOut=null;
OutputStreamWriter outStream = null;
BufferedWriter buffWriter=null;
try{
fOut=new FileOutputStream(fileName);
outStream=new OutputStreamWriter(fOut);
buffWriter=new BufferedWriter(outStream);

String nome=null;
String cognome=null;
String data=null;
String postaElettronica=null;
String telefono=null;
nome =t1.getText();
cognome =t2.getText();
data =t3.getText();
postaElettronica=t4.getText();
telefono=t5.getText();
buffWriter.write(nome+";"+cognome+";"+data+";"+postaElettronica+";"+telefono+"\r\n");
//outStream.write(nome+";"+cognome+";"+data+";"+postaElettronica+";"+telefono+"\r\n");
System.out.println(cognome);
}catch(FileNotFoundException fnfe){
System.out.println("Errore nelle crazioni dei flussi di input e/o output di byte da/verso i file");
System.out.println(fnfe.getMessage());
}catch(UnsupportedEncodingException uee){
System.out.println("Codifiche dei flussi di input e/o di output di caratteri errate");
System.out.println(uee.getMessage());
}catch(IOException ioe){
System.out.println("Errore in fase di lettura e/o scrittura di caratteri");
System.out.println(ioe.getMessage());
}
finally{
if(buffWriter !=null){
buffWriter.close();

}
}
}
public static void main(String[]args) throws IOException{
LeggiScriviStream lss1=new LeggiScriviStream();
}
}

martedì 9 marzo 2010

Chat Cliente-Server: fatto in classe

Si è posto di fare una chat tra gli alunni della classe e il professore aggiungendo poi anche la grafica per rendere il programma più simile ai programmi classici di chat.



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=new JTextField(20);
JTextArea a1=new JTextArea(20,50);
JScrollPane scrollPane;
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);
Thread tt=new Thread(new InArrivoDalServer());
creaCollegamento();
tt.start();
}
public class InviaMessaggio implements ActionListener{
public void actionPerformed(ActionEvent e){
try{
scrittore.write(t1.getText());
scrittore.println(t1.getText());
//per riazzerare il metodo
scrittore.flush();
}catch(Exception ex){ex.printStackTrace();}
t1.setText("");
}
}
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 InArrivoDalServer implements Runnable{
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();
}
}
}
public static void main(String[]args){
Client cc=new Client();
cc.finestra();
}
}



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(messaggio);
}
}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();
}catch(Exception ex){
ex.printStackTrace();
}
}
}
}
public static void main(String args[]){
ServerSemplice s=new ServerSemplice();
s.go();
}
}

mercoledì 3 marzo 2010

Esercizio sugli stream-svolto in classe

Data una lista di nome, cognome, data di nascita di alcune persone messe in ordine verticale, posizionarle in modo orizzontale.


//per intercettare il tipo di errore input-output degli stream
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.io.FileNotFoundException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.BufferedReader;
import java.io.BufferedWriter;
public class Stream {
public static void main(String[]args)throws IOException{
/*if(args.length!=4){
System.out.println("Usage: java CambiaFormato ");
System.exit(-1);
}
*/

if(args.length!=4){
String s="Usage:java CambiaFormato ";
throw new IllegalArgumentException(s);
}
FileInputStream FIn=null;
FileOutputStream FOut=null;
InputStreamReader inStream=null;
OutputStreamWriter outStream = null;
BufferedReader buffRead =null;
BufferedWriter buffWriter=null;
// null sta per vuoti
try{
FIn=new FileInputStream(args[0]);
FOut=new FileOutputStream(args[2]);

inStream=new InputStreamReader(FIn,args[1]);
outStream=new OutputStreamWriter(FOut,args[3]);

buffRead= new BufferedReader(inStream);
buffWriter=new BufferedWriter(outStream);
String temp=null; // temp=stringa temporanea-una volta carica il nomr, poi cognome ecc
String nome=null;
String cognome=null;
String data=null;
int count =1; // per contare che riga sto leggendo
while((temp=buffRead.readLine())!= null){
if((count %3)==1)
nome =temp;

else if((count %3)==2)
cognome =temp;

else{
data =temp;
buffWriter.write(nome+";"+cognome+";"+data+"\r\n");
}
count++;
}
System.out.println("Copia effettuata,lette"+(count-1)+"righe");
}catch(FileNotFoundException fnfe){
System.out.println("Errore nelle crazioni dei flussi di input e/o output di byte da/verso i file");
System.out.println(fnfe.getMessage());
}catch(UnsupportedEncodingException uee){
System.out.println("Codifiche dei flussi di input e/o di output di caratteri errate");
System.out.println(uee.getMessage());
}catch(IOException ioe){
System.out.println("Errore in fase di lettura e/o scrittura di caratteri");
System.out.println(ioe.getMessage());
}
finally{
if(buffWriter!=null)
buffWriter.close();
if(buffRead!=null)
buffRead.close();
if(outStream!=null)
outStream.close();
if(buffWriter!=null)
buffWriter.close();
if(buffWriter!=null)
buffWriter.close();
if(buffWriter!=null)
buffWriter.close();
}

}

}