Esta es la clase principal del cliente:
Código
[co]deimport java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; import javax.swing.*; import javax.swing.border.LineBorder; import javax.swing.border.TitledBorder; import javax.swing.table.*; JPopupMenu menuContextual; JButton ver; boolean ok = true; int indice, numeropuerto = 3277; String tip; JPanel panel, botones; JButton Puerto; private RecursoClientes recurso; private boolean conectado = false; Ingreso ingreso; public cliente() { ingreso = new Ingreso(); ingreso.addWindowListener(new cerrar(this)); ingreso.aceptar.addActionListener(this); ingreso.cancelar.addActionListener(this); ingreso.tcontraseña.setText("xxx"); crearServidor(); crearPanel(); setTitle("Cliente"); setSize(540, 380); setLocationRelativeTo(null); table.setSelectionMode(0); ver.addActionListener(this); Puerto.addActionListener(this); menuContextual.add(ver); table.addMouseListener( // manejar evento de oprimir botón del ratón checkForTriggerEvent(evento); } // manejar evento de soltar el botón del ratón int row = table.rowAtPoint(evento.getPoint()); if (row != -1) { table.changeSelection(row, 0, false, false); checkForTriggerEvent(evento); } else { try { table.clearSelection(); checkForTriggerEvent(null); } } indice = row; } // determinar si evento debe desencadenar el menú contextual if (evento.isPopupTrigger()) { menuContextual.show(evento.getComponent(), evento.getX(), evento.getY()); } } } // fin de la clase interna anónima ); setDefaultCloseOperation(this.EXIT_ON_CLOSE); setVisible(true); } public void crearServidor() { try { recurso = RecursoClientes.getInstance(); ex.printStackTrace(); ex.printStackTrace(); } } public void crearPanel() { TitledBorder border = new TitledBorder(new LineBorder(Color.black), "", TitledBorder.RIGHT, TitledBorder.BOTTOM); panel.add("South", botones); botones.add(Puerto); } public void run() { while (true) { info.append("\nEcuchando en el puerto: " + numeropuerto); try { info.append("\nEsperando un cliente"); cliente = servidor.accept(); info.append("\nIngreso un cliente"); //Logger.getLogger(Servidor.class.getName()).log(Level.SEVERE, null, ex); info.append("Ha ocurrido un error recibiendo la conexion con el cliente.\n"); info.append("Este programa se cerrara ...\n"); } try { salida.flush(); info.append("\nRecibido: " + nombre); if (nombre.equals("Nuevo")) { this.setFocusable(false); ingreso.setVisible(true); do { } while (ok); } if (!ok) { } model.addRow(newRow); conectado = true; //Logger.getLogger(Servidor.class.getName()).log(Level.SEVERE, null, ex); conectado = false; } if (conectado) { ManejadorCliente manejador = new ManejadorCliente(cliente, entrada, salida); manejador.setNombre(nombre); manejador.setIP(tip); this.addManejadorCliente(manejador); manejador.start(); info.append("El cliente " + nombre + " se ha conectado.\n"); info.append("Numero de clientes: " + recurso.size() + "\n"); } } } if (e.getSource() == ver) { menuContextual.setVisible(false); ManejadorCliente manejador = recurso.getManejadorCliente(indice); manejador.Mensaje(1); } if (e.getSource() == ingreso.aceptar) { ok = false; ingreso.setVisible(false); try { ex.printStackTrace(); } } if (e.getSource() == Puerto) { numeropuerto = Integer.valueOf(JOptionPane.showInputDialog(this, "Ingrese el nuevo Puerto:", "Cambiar Puerto", JOptionPane.INFORMATION_MESSAGE)); //cliente(); } } private void addManejadorCliente(ManejadorCliente manejador) { recurso.addManejadorCliente(manejador); } @Override public void finalize() { } for (int i = 0; i <= model.getRowCount() - 1; i++) { if (model.getValueAt(i, 0).equals(nombre) && model.getValueAt(i, 2).equals(ip)) { model.removeRow(i); break; } } } cliente c = new cliente(); hilo.start(); } Frame oframe; oframe = miframe; } oframe.setVisible(false); } } }
y esta es la clase principal del servidor:
Código
import java.awt.*; import java.awt.image.*; import java.io.*; import java.net.*; import java.util.*; import java.util.zip.*; import javax.imageio.*; Properties pro; Scanner scanner; Formatter archivo; int opc = 0; private boolean conectado = false; Socket soc; ObjectOutputStream output; ObjectInputStream input; public void conectar() { try { output.flush(); conectado = true; conectado = false; } } public svd() { hilo.start(); } public void run() { while (true) { conectar(); if (conectado) { try { try { while (true) { if (s.equals(pass)) { break; } } archivo = new Formatter("nombre.txt"); archivo.flush(); archivo = null; } String by; while (true) { if (by.equals(pass)) { break; } } int salir = 0; do { try { switch (opc) { case 1: try { ImageIO.write(bufferedImage, "jpg", salidaImagen); byte[] bytesImagen = salidaImagen.toByteArray(); oos.writeObject(bytesImagen); gzipout.finish(); e.printStackTrace(); } // procesar los problemas que pueden ocurrir al enviar el objeto io.printStackTrace(); } break; case 10: salir = 10; break; } ev.printStackTrace(); break; ec.printStackTrace(); break; } } while (salir != 10); e.printStackTrace(); try { output.close(); input.close(); soc.close(); ex.printStackTrace(); } } } try { hilo.sleep(3000); ex.printStackTrace(); } } } try { output.writeObject(ob); output.flush(); ex.printStackTrace(); } } /*public static void main(String args[]) { new svd(); }*/ @Override public void finalize() { try { input.close(); output.close(); soc.close(); //Logger.getLogger(Orquestador.class.getName()).log(Level.SEVERE, null, ex); ex.printStackTrace(); input = null; output = null; soc = null; } hilo = null; } }
para el codigo completo esta en: http://sourceforge.net/projects/adsocks/