Plaćanje e-novcem
Teorija Original SSL Echo SSL e-cash Budućnost Certifikati
Download source i klase
Klijent
Trgovac
Banka
Lista
"datoteke"
Verzija Klijenta uz SSL

import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import java.util.*;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.lang.*;

import java.io.IOException;

import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;

public class Client extends Frame {


MyList lstProizvod;
String ImeServera;
String order;
int total;

static String MOJ_ID;
static String Ime_Servera_Banke,Ime_Servera_Trgovine;

//String strIzbor[];
String strIzbor[] = {"CD Normal $1","CD Trax $1","CD RW $1","BNC $2","DVD $100","HDD 10.5 $110",
"HDD 15 $120","HDD 20.5 $130","HDD 30 $135","HDD 50 $150","PC A1 $500","PC server $1500","Win NT $40","zvucnici 20W $8",
"LAN adapter $7","MS mouse $5","S/N monitor $220","Visual Studio 6 $999","Corel 8 $99","RedHat 6.2 $10"
};

TextField linija;
TextArea txtUk,txtStatus;
Label lblProizvod;
Label lblCijena;

Button Kupi;
Button Ponisti;
komunikacija objBanka,objTrgovac;

public static void main(String args[]) {
if ( args.length!=3 ) {
System.out.println("? Upotreba: java Client MOJ_ID Ime_Servera_Banke Ime_Servera_Trgovine");
System.exit(1);
}
MOJ_ID = new String(args[0]);
Ime_Servera_Banke=new String(args[1]);
Ime_Servera_Trgovine=new String(args[2]);

Client app = new Client();

}

public Client() {
super("Seminar:OS2, Modul KUPAC");
setSize(260,470);
addWindowListener(new Client.WindowEventHandler());
setLayout(null);
setupList();

// Objekti za komunikaciju
objBanka = new komunikacija(Ime_Servera_Banke,9811);
objTrgovac = new komunikacija(Ime_Servera_Trgovine,9822);

// User Interface
Kupi = new Button("Kupi");
Ponisti = new Button("Ponisti");
lblProizvod = new Label("Obabir proizvoda");
lblCijena = new Label("Kosarica");
txtUk = new TextArea();
linija = new TextField();
txtStatus = new TextArea();

lblProizvod.setBounds (10,20,100,35);
lblCijena.setBounds (120,20,200,35);
lstProizvod.setBounds (10,60,100,200);
txtUk.setBounds (120,60,120,200);
txtStatus.setBounds(10,350,240,100);
Kupi.setBounds (10,270,100,30);
Ponisti.setBounds (120,270,100,30);
Kupi.addActionListener(new ButtonHandler());
Ponisti.addActionListener(new ButtonHandler());
txtUk.setEditable(false);
linija.setBounds(10,310,220,20);
add(lblProizvod);
add(lstProizvod);
add(lblCijena);

add(txtStatus);
add(txtUk);
add(Kupi);
add(Ponisti);
add(linija);

show();
Write(txtStatus,"BANKA\n");
Write(txtStatus,"Ime: "+objBanka.ime+"\n");
Write(txtStatus," IP: "+objBanka.IP_adr+"\n");
Write(txtStatus,"TRGOVAC\n");
Write(txtStatus,"Ime: "+objTrgovac.ime+"\n");
Write(txtStatus," IP: "+objTrgovac.IP_adr+"\n");
total=0;

}

// Pretvara Integer u String i vraca ga
public String DajTotal() {
Integer priv = new Integer(total);
return priv.toString();
}

// podesava Listu
void setupList() {

lstProizvod = new MyList(10,true,strIzbor);

ListHandler lh = new ListHandler();
lstProizvod.addItemListener(lh);

}

// Ispisuje na neko podrucje teksta unutar GUI-a
void Write(TextArea pr,String strPod) {
String strTemp;
strTemp=pr.getText()+strPod;
pr.setText(strTemp);
}

// Brise ekran
void ClrScr(TextArea pr) {
pr.setText("");
}

void Kupi() {
String dignov = new String();
ClrScr(txtStatus);
Write(txtStatus,"Kupovina u tijeku:\n");
Write(txtStatus,"Salje se zahtjev banci...\n");
objBanka.zahtjev("Daj pare"); // ??? daj

// Zahtjev(cifra)
Write(txtStatus,"Zahtjev odboren...\n na racunu :");
Write(txtStatus, objBanka.Stanje+"\n");
Write(txtStatus,"Novcanica:");
dignov=objBanka.strNovcanica;
Write(txtStatus, dignov+"\n");


/* Realizirati komunikaciju sa trgovcem (Koraci 3 i4) */

// Salji trgovcu pare i listu proizvoda(Redni broj)
objTrgovac.zahtjevtrg(dignov);
Write(txtStatus,"Stanje kupovine :");
Write(txtStatus,objTrgovac.Stanje+"\n");
//odgovor trgovca


}

String Ukupno() {
String cifra = new String();
cifra.valueOf(total);
return cifra;

}


class ListHandler implements ItemListener {

public void itemStateChanged(ItemEvent e) {
String order=new String();
String items[] = lstProizvod.getSelectedItems();
total = 0;
for ( int i=0;i<items.length;++i ) {
// gleda gdje pocinje cijena
int pocetak = items[i].indexOf('$')+1;
int kraj = items[i].length();
Integer yy = new Integer(total);
String temp = items[i].substring(pocetak,kraj);
total+= yy.parseInt(temp);

order+=(items[i]+"\n");
}
txtUk.setText("");
Write(txtUk,order);
linija.setText("Ukupno: $"+total);
}
}

class komunikacija {

private InetAddress host;
private String strZahtjev;
private int intPort;
public String ime,IP_adr;
public String Stanje;
public String strNovcanica;


public komunikacija(String strURL,int Prt) {
Stanje= new String();
strNovcanica = new String ();
intPort=Prt;
try {
host = InetAddress.getByName(strURL);
ime = host.getHostName();
IP_adr = host.getHostAddress();
} catch ( UnknownHostException ex ) {
ime="? Unknown host";
IP_adr="xxx.xxx.xxx.xxx";
}
}

public void getPage(SSLSocket clientSocket) {

try {
// Pribavlja ulazne i izlazne tokove
DataOutputStream outbound = new DataOutputStream(
clientSocket.getOutputStream() );
DataInputStream inbound = new DataInputStream(
clientSocket.getInputStream() );

// Zahtjev za odredjenom kolicinom novca - KORAK 1
String moram = new String();
String temp1 = new String();
moram=DajTotal();
temp1="";
if ( moram.length()<6 ) {
for ( int h=1;h<=6-moram.length();h++ ) {
temp1+="0";
}
}
temp1+=moram;
trazi_novac upit = new trazi_novac(MOJ_ID,temp1);

outbound.writeBytes(upit.Paket()+"\r\n");
/////////////////////////////////////////////////////////////////////////////////

// Odgovor banke - KORAK 2
String responseLine = new String();
responseLine ="";
while ( (responseLine = inbound.readLine()) != null ) {

if ( responseLine.startsWith("$") ) {
Stanje=responseLine;
} else if ( responseLine.startsWith("!") ) {
strNovcanica=responseLine;

}
}
outbound.close();
inbound.close();
clientSocket.close();
///////////////////////////////////////////////

} catch ( IOException ioe ) {
System.out.println("IOException: " + ioe);
}

}


public void getPageTr(SSLSocket clientSocket) {
try {
// Pribavlja ulazne i izlazne tokove
DataOutputStream outbound = new DataOutputStream(
clientSocket.getOutputStream() );
DataInputStream inbound = new DataInputStream(
clientSocket.getInputStream() );

// Salje zahtjev (novcanicu) trgovcu - KORAK 3
outbound.writeBytes(strZahtjev+"\r\n");
System.out.print("Zahtjev trgovcu :"+strZahtjev+"\n");
/////////////////////////////////////////////////////////////////////////////////

// Odgovor trgovca - KORAK 6
String responseLine = new String();

responseLine ="";
while ( (responseLine = inbound.readLine()) != null ) Stanje = responseLine;
outbound.close();
inbound.close();
clientSocket.close();
///////////////////////////////////////////////

} catch ( IOException ioe ) {
System.out.println("IOException: " + ioe);
}
}


public void zahtjev(String sto) {
String novac = new String();
try {
// Otvara klijentov socket za vezu
SSLSocketFactory sslsocketfactory = (SSLSocketFactory)SSLSocketFactory.getDefault();
SSLSocket clientSocket1 = (SSLSocket)sslsocketfactory.createSocket(IP_adr, intPort);
//SSLSocket clientSocket1 = SSnew Socket(IP_adr, intPort);

Write(txtStatus, clientSocket1+"\n");
strZahtjev=sto;

getPage(clientSocket1);
} catch ( UnknownHostException uhe ) {
Write(txtStatus,"UnknownHostException: " + uhe +"\n");
} catch ( IOException ioe ) {
Write(txtStatus,"IOException: " + ioe+"\n");
}

}

public void zahtjevtrg(String sto) {
String novac = new String();
try {
// Otvara klijentov socket za vezu
//Socket clientSocket1 = new Socket(IP_adr, intPort);

SSLSocketFactory sslsocketfactory = (SSLSocketFactory)SSLSocketFactory.getDefault();
SSLSocket clientSocket1 = (SSLSocket)sslsocketfactory.createSocket(IP_adr, intPort);

Write(txtStatus, clientSocket1+"\n");
strZahtjev=sto;

getPageTr(clientSocket1);
} catch ( UnknownHostException uhe ) {
Write(txtStatus,"UnknownHostException: " + uhe +"\n");
} catch ( IOException ioe ) {
Write(txtStatus,"IOException: " + ioe+"\n");
}

}
}

/** Klasa za Komunikaciju izmedju kupca i banke u modulu KUPAC
Konstruktor: trazi_novac(ID_kupca,trazena_svota);
posalji_upit() - prijenos novca iz banke kupcu
provjera() - je li novcanica prava

*/

class trazi_novac {
private String strPaket;
private String strNovac;

public trazi_novac (String strID,String strKolicina) {
String strKontrola = "";
int intChkSum = 0;

strPaket="";
strPaket=strID+strKolicina;
for ( int i=0;i<strPaket.length();i++ ) {
intChkSum+=strPaket.charAt(i);
}
intChkSum%=100;
strKontrola=Integer.toString(intChkSum);
// strID 6 znamenki,strKolicina 6 znamenki,strKontrola 2 znamenke
strPaket+=strKontrola;
}


public String DajNovac() {
return strNovac;
}

public String Paket() {
return strPaket;
}

public boolean provjera() {

// Kontrolna je jednaka zbroju SVIH prethodnih
int intChk1, intChk2, intChk3, Sum=0;
boolean boolUspio = true;

// Kontrolne znamenke
intChk1=(int)strNovac.charAt(7)-48;
intChk2=(int)strNovac.charAt(14)-48;
intChk3=(int)strNovac.charAt(18)-48;

// Petlja provjere
for ( short i=0;i<strNovac.length();i++ ) {
if ( (i==7)&&(Sum%8!=intChk1) ) boolUspio=false;
if ( (i==14)&&(Sum%8!=intChk2) ) boolUspio=false;
if ( (i==18)&&(Sum%8!=intChk3) ) boolUspio=false;
Sum+=strNovac.charAt(i)-48;
}

return boolUspio;

}


}


class ButtonHandler implements ActionListener {

public void actionPerformed(ActionEvent e) {
String txtKupovine;
String s = e.getActionCommand();

if ( "Kupi".equals(s) ) {
Kupi();

}

if ( "Ponisti".equals(s) ) {
txtUk.setText("");


}

}

}


class WindowEventHandler extends WindowAdapter {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

}

}

class novcic {
static public String Novcanica;
public novcic() {
Novcanica= new String();
}
}

 

 

Operacijski sustavi 2 - sigurnost, plaćanje e-novcem