if (puerto != 0) { // iniciarServer(txtPuerto.getText()); try { serverSocket = new ServerSocket(puerto); // while (true) {
lblResult.setText("Esperando al Cliente por el puerto: " + puerto); SocketCliente = serverSocket.accept(); // espera el Servidor if (SocketCliente.isConnected()) {
public static void main(String args[]) { /* Set the Nimbus look and feel */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break;
if (estado && hilo1 == null) { hilo1 = new Thread(this, "ClienteImagens"); hilo1.start(); } */
public void IniConexion() { try { //Iniciar Socket para la conexion con el Servidor socketCliente = new Socket("localhost", 5000);
System.out.println("Estableciendo Conexion con el Servidor"); if (socketCliente.isConnected()) { estado = true; System.out.println("Conectado con el servidor"); // Menu(); thread = new Thread(this, "Cliente"); thread.start();
} } catch (NumberFormatException | IOException e) { System.out.println(e.toString()); System.out.println("No se puede establecer la conexion"); estado = false; } }
@Override public void run() { // enviarImagenes(); Menu(); }
public void enviarImagenes() { while (estEnvioImg) { System.out.println("Hilo enviando imagenes"); try { if (socketCliente != null) { //Iniciar el Objeto Stream con el cual se enviaran los datos salida = new ObjectOutputStream(socketCliente.getOutputStream()); //crear el Array de Bytes del para guardar la info anterior imgSalida = new ByteArrayOutputStream(); //Crear la Imagen y guardarlo en el objeto anterior ImageIO.write(pantallazo(), "jpeg", imgSalida); //Crear un Array de Bytes de la imagen capturada byte[] bytesImg = imgSalida.toByteArray(); //Enviar al servidor el array de Bytes salida.writeObject(bytesImg); //vaciar Buffer imgSalida.flush(); } } catch (Exception e) { System.out.println(e.getMessage());
System.out.println("Desconectado al enviar img"); estEnvioImg = false;
//**** Retorna Imagen ****/ BufferedImage pantallazo() throws Exception { //obtener el tamaño de la pantalla Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); //crear un objeto del tipo Rectangle con el tamaño obtenido Rectangle screenRectangle = new Rectangle(screenSize); //inicializar un objeto robot Robot r = new Robot(); //obtener una captura de pantalla del tamaño de la pantalla BufferedImage image = r.createScreenCapture(screenRectangle);
//SERVIDOR
public class JfrmPrincipal extends javax.swing.JFrame implements Runnable {
private int puerto;
private ServerSocket serverSocket;
private Socket SocketCliente;
private DataOutputStream salida;
private DataInputStream entradaDatos;
boolean estado;
boolean estadoProcesImg;
private ObjectInputStream entradaImg;
private ByteArrayInputStream bufferImg;
private BufferedImage imagen;
private ImageIcon img = null;
private Thread hiloSer;
private int cont = 0;
public JfrmPrincipal() {
initComponents();
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
IniciarConexion();
}
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
MenuFunciones("DameImagen", SocketCliente);
}
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
MenuFunciones("DameDatos", SocketCliente);
}
public void IniciarConexion() {
puerto = Integer.parseInt(txtPuerto.getText());
if (puerto != 0) {
// iniciarServer(txtPuerto.getText());
try {
serverSocket = new ServerSocket(puerto);
// while (true) {
lblResult.setText("Esperando al Cliente por el puerto: " + puerto);
SocketCliente = serverSocket.accept(); // espera el Servidor
if (SocketCliente.isConnected()) {
MenuFunciones("DameDatos", SocketCliente);
// agregar(SocketCliente.getInetAddress().getHostName());
// ArrayListSocketsClientes.add(SocketCliente);
}
// }
} catch (NumberFormatException | IOException ex) {
System.out.println(ex.getMessage());
}
} else {
lblResult.setText("Este no es un puerto");
}
}
public void limpiar() {
//this.SocketCliente=null;
this.salida = null;
this.entradaDatos = null;
this.entradaImg = null;
this.bufferImg = null;
this.imagen = null;
this.img = null;
this.hiloSer = null;
}
public void cerrar() {
try {
this.salida.close();
this.entradaDatos.close();
this.entradaImg.close();
this.bufferImg.close();
} catch (IOException ex) {
Logger.getLogger(JfrmPrincipal.class.getName()).log(Level.SEVERE, null, ex);
System.out.println("Error metodo cerrar");
}
}
private void MenuFunciones(String opc, Socket SocketCli) {
String sever = "Servidor" + cont;
switch (opc) {
case "DameDatos":
// cerrar();
// limpiar();
pedirDatos(SocketCli);
// recibirDatos(SocketCli);
// ReciboDatosHilo rdh=new ReciboDatosHilo(SocketCliente);
// rdh.start();
break;
case "DameImagen":
// cerrar();
/* limpiar();
pedirImagen(SocketCli);
estadoProcesImg = true;
// procImagenes();
Thread hiloSer = new Thread(this, sever);
hiloSer.start();
cont++;*/
pedirImagen(SocketCli);
ServerMultiHilo smh = new ServerMultiHilo(SocketCliente);
smh.start();
break;
}
}
public void DetenerImg() {
try {
salida = new DataOutputStream(SocketCliente.getOutputStream());
salida.writeUTF("DetenerEnvio");
System.out.println("Servidor envio Detener");
} catch (IOException ex) {
Logger.getLogger(JfrmPrincipal.class
.getName()).log(Level.SEVERE, null, ex);
}
}
public void pedirDatos(Socket SocketCliente) {
try {
//SocketCliente.shutdownInput();
salida = new DataOutputStream(SocketCliente.getOutputStream());
salida.writeUTF("DameDatos");
System.out.println("Envio DameDatos");
DataInputStream entradaDatos2 = new DataInputStream((SocketCliente.getInputStream()));
// entradaDatos2.read();
// entradaDatos2 = new DataInputStream((SocketCliente.getInputStream()));
System.out.println(entradaDatos2.readUTF());
System.out.println(entradaDatos2.readUTF());
System.out.println(entradaDatos2.readUTF());
} catch (IOException ex) {
System.out.println("Error al pedir datos: " + ex.getMessage());
}
}
public void recibirDatos(Socket SocketCliente) {
DataInputStream entradaDatos2 = null;
try {
entradaDatos2 = new DataInputStream((SocketCliente.getInputStream()));
System.out.println(entradaDatos2.readUTF());
System.out.println(entradaDatos2.readUTF());
System.out.println(entradaDatos2.readUTF());
} catch (IOException ex) {
Logger.getLogger(JfrmPrincipal.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void pedirImagen(Socket SocketCliente) {
try {
salida = new DataOutputStream(SocketCliente.getOutputStream());
salida.writeUTF("DameImagen");
System.out.println("Servidor Envio DameImagen");
} catch (IOException ex) {
System.out.println("Error al pedir Imagen: " + ex.getMessage());
// Logger.getLogger(FrmServer.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void run() {
procImagenes();
}
void procImagenes() {
JFramePantalla pantalla = new JFramePantalla();
pantalla.setVisible(true);
while (pantalla.estadoPantalla && SocketCliente.isConnected()) {
System.out.println("Hilo SERVER Recibiendo IMG");
try {
lblResult.setText("Procesando Imagen");
entradaImg = new ObjectInputStream(SocketCliente.getInputStream());
byte[] bytesImg = (byte[]) entradaImg.readObject();
bufferImg = new ByteArrayInputStream(bytesImg);
imagen = ImageIO.read(bufferImg);
img = new ImageIcon(imagen);
// Image scaledInstance = imagen.getScaledInstance(800, 600, Image.SCALE_DEFAULT);
Image scaledInstance = imagen.getScaledInstance(1440, 820, Image.SCALE_DEFAULT);
pantalla.setPantalla(scaledInstance);
} catch (IOException | ClassNotFoundException e) {
System.err.println(e.getMessage());
estadoProcesImg = false;
lblResult.setText("Desconectado");
this.remove(pantalla);
// DetenerImg();
}
}
if (pantalla.estadoPantalla != true) {
System.out.println("Detiene envio IMG");
DetenerImg();
}
// entradaImg.close();
// bufferImg.close();
}
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(JfrmPrincipal.class
.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(JfrmPrincipal.class
.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(JfrmPrincipal.class
.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(JfrmPrincipal.class
.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new JfrmPrincipal().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JButton jButton4;
private javax.swing.JLabel jLabel1;
private javax.swing.JList jList1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JLabel lblResult;
private javax.swing.JTextField txtPuerto;
}
//CLIENTE
package nuevocliente;
public class SocketCliente implements Runnable {
private Socket socketCliente;
private boolean estado = false;
private boolean estEnvioImg = false;
private ObjectOutputStream salida;
private ByteArrayOutputStream imgSalida; // control remoto
// private Thread hilo1; // hilo
private Thread thread = null;
private String ipServer = "localhost";
private DataInputStream entradaOpc;
private DataOutputStream salida2;
// private DataOutputStream salidaDatos;
private String opc = null;
public SocketCliente() {
IniConexion();
}
/*this.IniCon();
if (estado && hilo1 == null) {
hilo1 = new Thread(this, "ClienteImagens");
hilo1.start();
}
*/
public void IniConexion() {
try {
//Iniciar Socket para la conexion con el Servidor
socketCliente = new Socket("localhost", 5000);
System.out.println("Estableciendo Conexion con el Servidor");
if (socketCliente.isConnected()) {
estado = true;
System.out.println("Conectado con el servidor");
// Menu();
thread = new Thread(this, "Cliente");
thread.start();
}
} catch (NumberFormatException | IOException e) {
System.out.println(e.toString());
System.out.println("No se puede establecer la conexion");
estado = false;
}
}
@Override
public void run() {
// enviarImagenes();
Menu();
}
public void limpiar() {
this.salida = null;
this.imgSalida = null;
this.thread = null;
this.salida2 = null;
}
public void Menu() {
try {
int cont = 0;
ClienteMultiHilo cmh = null;
while (true) {
entradaOpc = new DataInputStream(socketCliente.getInputStream());
opc = entradaOpc.readUTF();
System.out.println("Recibio del servidor: " + opc);
String Cliente = "Cliente" + cont;
switch (opc) {
case "DameDatos": // enviar objeto
// limpiar();
// String idRegistro = entradaFuncion.readUTF();
DataOutputStream salidaDatos = new DataOutputStream((socketCliente.getOutputStream()));
salidaDatos.writeUTF("1");
salidaDatos.writeUTF("2009601051");
salidaDatos.writeUTF("hola que tal");
System.out.println(" Cliente Envio datos");
// salidaDatos.close();
// EnvioDatoHilo edh=new EnvioDatoHilo(socketCliente);
//edh.start();
// salidaObjecto(SocketServer);
break;
case "DameImagen": // enviar Capturas de pantalla
/* limpiar();
estEnvioImg = true;
// enviarImagenes();
System.out.println("Cliente name: " + Cliente);
hilo1 = new Thread(this, Cliente);
hilo1.start();
cont++;*/
cmh = new ClienteMultiHilo(socketCliente);
cmh.start();
break;
case "DetenerEnvio":
cmh.Detener();
System.out.println("hilo se detuvo");
/* limpiar();
//OptionPane.showMessageDialog(null,"hilo envio se detuvo");
estEnvioImg = false;
System.out.println("hilo se detuvo");
// JOptionPane.showMessageDialog(null, "estado pinche: PARA: " + eimg.estado);
*/
break;
}
//opc = "";
}
} catch (IOException ex) {
System.out.println("error en MEnu: " + ex.getMessage());
}
}
public void enviarImagenes() {
while (estEnvioImg) {
System.out.println("Hilo enviando imagenes");
try {
if (socketCliente != null) {
//Iniciar el Objeto Stream con el cual se enviaran los datos
salida = new ObjectOutputStream(socketCliente.getOutputStream());
//crear el Array de Bytes del para guardar la info anterior
imgSalida = new ByteArrayOutputStream();
//Crear la Imagen y guardarlo en el objeto anterior
ImageIO.write(pantallazo(), "jpeg", imgSalida);
//Crear un Array de Bytes de la imagen capturada
byte[] bytesImg = imgSalida.toByteArray();
//Enviar al servidor el array de Bytes
salida.writeObject(bytesImg);
//vaciar Buffer
imgSalida.flush();
}
} catch (Exception e) {
System.out.println(e.getMessage());
System.out.println("Desconectado al enviar img");
estEnvioImg = false;
return;
}
}
}
void finCon() {
estado = false;
try {
socketCliente.close();
// this.dispose();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
// lblEstado.setText("Esperando Iniciar");
// txtPuerto.setEnabled(true);
}
//**** Retorna Imagen ****/
BufferedImage pantallazo() throws Exception {
//obtener el tamaño de la pantalla
Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
//crear un objeto del tipo Rectangle con el tamaño obtenido
Rectangle screenRectangle = new Rectangle(screenSize);
//inicializar un objeto robot
Robot r = new Robot();
//obtener una captura de pantalla del tamaño de la pantalla
BufferedImage image = r.createScreenCapture(screenRectangle);
return image;
}
}