Programacin Avanzada. Juan Manuel Fernndez. Curso 2011 Ejemplo de uso de sockets desde aplicaciones visuales.
Usan un hilo en banco. El software que se muestra es un ejemplo sin pulir donde se muestra el uso de sockets integrados en aplicaciones y no de manera autnoma. Partes han sido recicladas del trabajo de IBM y estn en ingls. El resto es similar a los ejemplos vistos en clase, especialmente la parte del Banco y sus cuentas. Interfaces
Lado del banco import [Link]; import [Link]; import [Link]; import [Link]; import [Link]; import [Link]; import [Link]; import [Link]; import [Link]; import [Link]; import [Link]; import [Link]; /* * * */ Interfaz que simula un cajero bancario. Juan Manuel Fernndez. Curso 2011
public class IUBanco extends JFrame { private static final long serialVersionUID = 1L; private JPanel jContentPane = null; private JLabel jLabel = null; private JLabel jLabel1 = null; private JTextField jTextField = null; private JLabel jLabel2 = null; private JTextField jTextField1 = null; private JButton jButton = null; private JButton jButton1 = null; private JButton jButton2 = null; private Banco bank; // @jve:decl-index=0: private Cuenta kue; private Remoto remo; private JTextField getJTextField() {
if (jTextField == null) { jTextField = new JTextField(); [Link](new Rectangle(174, 57, 151, 21)); } return jTextField; } private JTextField getJTextField1() { if (jTextField1 == null) { jTextField1 = new JTextField(); [Link](new Rectangle(175, 104, 149, 23)); } return jTextField1; } private JButton getJButton() { if (jButton == null) { jButton = new JButton(); [Link](new Rectangle(15, 148, 89, 39)); [Link]("Saldo"); [Link](new [Link]() { public void actionPerformed([Link] e) { [Link]("Saldo actionPerformed()"); kue = [Link]([Link]()); if (kue != null) [Link](""+[Link]()); else [Link]("Cuenta inexistente"); } }); } return jButton; } private JButton getJButton1() { if (jButton1 == null) { jButton1 = new JButton(); [Link](new Rectangle(120, 147, 103, 42)); [Link]("Deposita");
[Link](new [Link]() { public void actionPerformed([Link] e) { [Link]("Deposita actionPerformed()"); if ([Link]([Link](), [Link]([Link]()))) [Link]("Depsito realizado"); else [Link]("No se pudo realizar depsito"); } }); } return jButton1; } private JButton getJButton2() { if (jButton2 == null) { jButton2 = new JButton(); [Link](new Rectangle(241, 149, 87, 39)); [Link]("Retira"); [Link](new [Link]() { public void actionPerformed([Link] e) { [Link](" Retira actionPerformed()"); if ([Link]([Link](), [Link]([Link]()))) [Link]("Retiro realizado"); else [Link]("No se pudo realizar retiro"); } }); } return jButton2; } public static void main(String[] args) { // TODO Auto-generated method stub [Link](new Runnable() { public void run() { IUBanco thisClass = new IUBanco(); [Link](JFrame.EXIT_ON_CLOSE); [Link](true);
} }); } public IUBanco() { super(); initialize(); } private void initialize() { [Link](384, 286); [Link](getJContentPane()); [Link]("Cajero del banco"); [Link](new [Link]() { public void windowClosing([Link] e) { [Link]("windowClosing()"); // TODO Auto-generated Event stub windowClosing() [Link](); } }); bank = new Banco(); remo = new Remoto(bank); [Link](); } private JPanel getJContentPane() { if (jContentPane == null) { jLabel2 = new JLabel(); [Link](new Rectangle(46, 106, 121, 19)); [Link]("Saldo/Cantidad"); jLabel1 = new JLabel(); [Link](new Rectangle(45, 60, 121, 17)); [Link]("Numero de cuenta"); jLabel = new JLabel(); [Link](new Rectangle(78, 15, 201, 18)); [Link]([Link]); [Link](new Color(255, 204, 153)); [Link](KeyEvent.VK_UNDEFINED); [Link]([Link]); [Link]([Link]);
[Link]("Ventanilla de atencin a clientes"); jContentPane = new JPanel(); [Link](null); [Link](jLabel, null); [Link](jLabel1, null); [Link](getJTextField(), null); [Link](jLabel2, null); [Link](getJTextField1(), null); [Link](getJButton(), null); [Link](getJButton1(), null); [Link](getJButton2(), null); } return jContentPane; } } // @jve:decl-index=0:visual-constraint="10,10" import [Link]; /** * Clase que representa al banco, el cual maneja una lista de cuentas * Inicialmente crea tres cuentas A2011001 hasta 003 * Juan Manuel Fernndez. Curso 2011 */ public class Banco { private LinkedList<Cuenta> misCuentas; private final static String raznSocial="Banco de la Ilusin"; public Banco(){ //[Link]("Creando banco"); misCuentas = new LinkedList<Cuenta>(); temporal(); } private void temporal(){ creaCuenta("A2011001", 1000.0);
creaCuenta("A2011002", 5000.0); creaCuenta("A2011003", 500.0); } public Cuenta buscaCuenta(String nn){ //[Link]("solicitan buscar cuenta "+nn); Cuenta cue=null; for (int ix=0; ix<[Link]();ix++){ if ([Link](ix).getNumcta().equals(nn)){ cue = [Link](ix); } } //[Link]("saliendo de buscacuenta"); return cue; } public void creaCuenta(String nc, double sa){ [Link](new Cuenta(nc, sa)); } public boolean retira(String nc, double ka){ [Link]("Solicitan retiro "+nc); boolean resp = false; Cuenta kue = buscaCuenta(nc); if (kue != null) resp = [Link](ka); return resp; } public boolean deposita(String nc, double ka){ boolean resp = false; Cuenta kue = buscaCuenta(nc); if (kue != null) resp = [Link](ka); return resp; } }
/** * Clase que representa una cuenta, como las usadas antes * * Juan Manuel Fernndez. Curso 2011 */ public class Cuenta { private double saldo; private String numcta; public Cuenta(String nc, double sa){ numcta = nc; saldo = sa; } public synchronized boolean deposita(double kan){ boolean resp = false; if (kan >0.0){ saldo += kan; resp = true; } return resp; } public synchronized boolean retira(double kan){ boolean resp=false; if (kan>0 && kan <= saldo){ saldo -= kan; resp = true; } return resp; } public String getNumcta(){ return numcta; } public double getSaldo(){ return saldo; }
} import [Link]; import [Link]; import [Link]; import [Link]; import [Link]; import [Link]; import [Link]; import [Link]; import [Link]; import [Link]; import [Link]; import [Link]; /** * Clase que forma un hilo para atender clients remotos * Mientras atiende la interfaz local * Juan Manuel Fernndez Pea. Curso 2011 */ public class Remoto extends Thread { private int listenPort = 3000; private boolean alto = false; private OutputStream outputToSocket; private InputStream inputFromSocket; private BufferedReader streamReader; private FileReader fileReader; private BufferedReader bufferedFileReader; private PrintWriter streamWriter; private String line; private Banco elbanco; public Remoto(Banco bb){ elbanco = bb; }
public void run(){ //conectarse acceptConnections(); } public void acceptConnections() { //[Link]("Servidor de sockets: inicia accept"); try { ServerSocket server = new ServerSocket(listenPort); Socket incomingConnection = null; while (!alto) { // [Link]("Servidor de sockets: ciclo accept"); incomingConnection = [Link](); handleConnection(incomingConnection); sleep(250); } } catch (BindException e) { [Link]("Unable to bind to port " + listenPort); } catch (IOException e) { [Link]("Unable to instantiate a ServerSocket on port: " + listenPort); } catch (InterruptedException ie){} } public void handleConnection(Socket incomingConnection) { //[Link]("Servidor de sockets: handle inicia"); try { //[Link]("Servidor de sockets: handle crear archivos"); //outputToSocket = [Link](); inputFromSocket = [Link](); streamReader = new BufferedReader(new InputStreamReader(inputFromSocket)); //[Link]("Conectamos entrada a socket"); //fileReader = new FileReader(new File([Link]())); //bufferedFileReader = new BufferedReader(fileReader); streamWriter = new PrintWriter([Link]()); //[Link]("Conectamos salida a socket");
line = null; //[Link]("Servidor de sockets: handle maneja texto"); //while ((line = [Link]()) != null) { if ((line = [Link]()) != null) { //[Link]("Recib: "+line); atiende(); } //[Link](); [Link](); [Link](); } catch (Exception e) { //[Link]("Error handling a client: " + e); } } private void atiende(){ String resp; Cuenta kue; Scanner sca = new Scanner(line); //[Link]("Atiende: scaner listo"); String orden = [Link](); String cta = [Link](); //[Link]("Orden: "+orden+"; cuenta: "+cta); // piden saldo if ([Link]("Saldo")){ //[Link]("Piden saldo"); kue = [Link](cta); if (kue != null) resp =""+[Link](); else resp = "Cuenta inexistente"; //[Link]("Tenemos respuesta: "+resp); [Link](resp); [Link](); //[Link]("Enviamos respuesta."); } else{ //[Link]("No se que piden"); }
} protected void apaga(){ alto = false; } }
Parte del negocio import [Link]; import [Link]; import [Link]; import [Link]; import [Link]; import [Link]; import [Link]; import [Link]; import [Link]; /** * Clase Interfaz de cliente remoto * Slo pide saldo, por ahora * Juan Manuel Fernndez Pea. Curso 2011 */ public class Negociante extends JFrame { private static final long serialVersionUID = 1L; private JPanel jContentPane = null; private JLabel jLabel = null; private JTextField jTextField = null; private JLabel jLabel1 = null; private JTextField jTextField1 = null; private JButton jButton = null; private Negocio nego; private JTextField getJTextField() { if (jTextField == null) { jTextField = new JTextField(); [Link](new Rectangle(136, 15, 117, 25)); } return jTextField; } private JTextField getJTextField1() { if (jTextField1 == null) {
jTextField1 = new JTextField(); [Link](new Rectangle(136, 58, 115, 27)); } return jTextField1; } private JButton getJButton() { if (jButton == null) { jButton = new JButton(); [Link](new Rectangle(301, 16, 88, 27)); [Link]("Saldo"); [Link](new [Link]() { public void actionPerformed([Link] e) { [Link]("Negociante Saldo actionPerformed()"); // TODO Auto-generated Event stub actionPerformed() nego = new Negocio("localhost", 3000); [Link]([Link]([Link]())); } }); } return jButton; } public static void main(String[] args) { // TODO Auto-generated method stub [Link](new Runnable() { public void run() { Negociante thisClass = new Negociante(); [Link](JFrame.EXIT_ON_CLOSE); [Link](true); } }); } public Negociante() { super(); initialize(); }
private void initialize() { [Link](430, 200); [Link](getJContentPane()); [Link]("Negociante"); } private JPanel getJContentPane() { if (jContentPane == null) { jLabel1 = new JLabel(); [Link](new Rectangle(15, 59, 93, 24)); [Link]("Resultado"); jLabel = new JLabel(); [Link](new Rectangle(13, 16, 97, 22)); [Link]("Num Cuenta"); jContentPane = new JPanel(); [Link](null); [Link](jLabel, null); [Link](getJTextField(), null); [Link](jLabel1, null); [Link](getJTextField1(), null); [Link](getJButton(), null); } return jContentPane; } } // @jve:decl-index=0:visual-constraint="10,10" import [Link].*; import [Link].*; /** * Clase que maneja el socket para comunicarse * Juan Manuel Fernndez Pea. Curso 2011 */ public class Negocio { protected String hostIp ="localhost"; protected int hostPort= 3000; protected BufferedReader socketReader;
protected PrintWriter socketWriter; Socket client; String elnumcta = "A2011003"; String line=" "; public Negocio(String aHostIp, int aHostPort) { hostIp = aHostIp; hostPort = aHostPort; } public static void main(String[] args) { Negocio remoteFileClient = new Negocio("localhost", 3000); //"[Link]" [Link](); [Link](); [Link](); } public void accion(){ line=" "; [Link]("Negocio entranco a accin"); try { [Link]("Saldo "+elnumcta); [Link](); [Link]("Esperamos respuesta"); if ((line = [Link]()) != null) [Link]("Recibido: "+line); else [Link]("Recibimos mensaje vaco"); [Link]("Termin espera de respuesta"); }catch(IOException e){ [Link]("Error reading from banco: " + e); } } public void setUpConnection() { [Link]("Negocio haciendo conexin"); try { client = new Socket(hostIp, hostPort); [Link]("Negocio Enchufe Conectado");
socketReader = new BufferedReader( new InputStreamReader([Link]())); socketWriter = new PrintWriter([Link]()); [Link]("Negocio archivos conectados"); } catch (UnknownHostException e) { [Link]("Error setting up socket connection: unknown host at " + hostIp); } catch (IOException e) { [Link]("Error setting up socket connection: " + e); }} public void tearDownConnection() { try { [Link](); [Link](); } catch (IOException e) { [Link]("Error tearing down socket connection: " + e); } } public String opera(String nc){ elnumcta = nc; setUpConnection(); accion(); tearDownConnection(); return line; } }