Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > JAVA SOCKETS Problema al Recibir El Flujo de Datos de un Socket Cliente en un Socket Server

//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;
}

}

diciembre 11, 2014 | Registered Commenterchavez20066