Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Enviar comandos a la impresora via socket

Estas en el tema de Enviar comandos a la impresora via socket en el foro de Java en Foros del Web. Buenas tardes Estoy intentando enviar comandos a una impresora de tarjetas via socket, pero no he logrado que funcione... Tengo un ejemplo en PHP, que ...
  #1 (permalink)  
Antiguo 06/04/2015, 14:41
 
Fecha de Ingreso: septiembre-2011
Ubicación: Caracas
Mensajes: 240
Antigüedad: 13 años, 1 mes
Puntos: 9
Enviar comandos a la impresora via socket

Buenas tardes

Estoy intentando enviar comandos a una impresora de tarjetas via socket, pero no he logrado que funcione... Tengo un ejemplo en PHP, que es mas o menos asi:

Código PHP:
Ver original
  1. $ESC = chr(27); //Ascii character for Escape
  2. $CR = chr(13); // Ascii character for Carriage Return
  3. $cmd =  $ESC .  $command .  $CR; //Command is received as parameter
  4. socket_send($socket, $cmd, strlen($cmd), 0);
  5. socket_recv($socket, $respuesta, strlen($respuesta), 0);

Dicho ejemplo, esta funcionando perfectamente, pero el problema no es ese; el problema radica en que debo realizarlo en Java, y no esta funcionando con lo que he realizado, que es mas o menos asi:

Código Java:
Ver original
  1. char ESC = (char)27; //Ascii character for Escape
  2. char CR = (char) 13; //Ascii character for Carriage Return
  3. //I make another stuff here
  4. Socket socket = null;
  5. DataInputStream input = null;
  6. DataOutputStream output = null;
  7. // I make another stuff here
  8. socket = new Socket(address,port);
  9. input = new DataInputStream (socket.getInputStream());
  10. output  = new DataOutputStream (socket.getOutputStream());
  11. //I make another stuff here
  12. if (socket != null && input != null && output != null)
  13.             {
  14.                 try
  15.                 {
  16.                     String cmd=ESC+command+CR;
  17.                     byte[] message = cmd.getBytes();              
  18.                     output.writeShort(cmd.length());                                    
  19.                     output.writeBytes(cmd);
  20.  
  21.                     message = new byte[input.readShort()];                            
  22.                     input.readFully(message);                                                      
  23.                     response = new String(message);
  24.  
  25.                     salida.close();
  26.                     entrada.close();
  27.                     conec.close();
  28.                 }
  29.                 catch (Exception e)
  30.                 {
  31.                     System.out.println(e.toString());
  32.  
  33.                 }
  34.             }

He intentado enviando y recibiendo diferentes tipos de datos, aparte del tipo Short, pero no he podido hacer que funcione; no se si se debe a que estoy enviando la informacion de manera incorrecta, o estoy tratando de leer un tipo y la impresora me responde otro

Espero que hayan podido entender mi inquietud

Muchas gracias por su tiempo
  #2 (permalink)  
Antiguo 07/04/2015, 01:11
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 3 meses
Puntos: 182
Respuesta: Enviar comandos a la impresora via socket

Buenas,

Escribir en el socket:
Código Java:
Ver original
  1. String cmd=ESC+command+CR;
  2.         new PrintWriter(socket.getOutputStream(), true);
  3. out.print(cmd);


Leer de socket:
Código Java:
Ver original
  1. String respuesta;
  2.         new BufferedReader(
  3.             new InputStreamReader(socket.getInputStream()));
  4. while ((respuesta= in.readLine()) != null) {    
  5.     System.out.println(respuesta);
  6. }

La guia:
https://docs.oracle.com/javase/tutor...ets/index.html

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 07/04/2015, 07:14
 
Fecha de Ingreso: septiembre-2011
Ubicación: Caracas
Mensajes: 240
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: Enviar comandos a la impresora via socket

Cita:
Iniciado por Profesor_Falken Ver Mensaje
Buenas,

Escribir en el socket:
Código Java:
Ver original
  1. String cmd=ESC+command+CR;
  2.         new PrintWriter(socket.getOutputStream(), true);
  3. out.print(cmd);


Leer de socket:
Código Java:
Ver original
  1. String respuesta;
  2.         new BufferedReader(
  3.             new InputStreamReader(socket.getInputStream()));
  4. while ((respuesta= in.readLine()) != null) {    
  5.     System.out.println(respuesta);
  6. }

La guia:
https://docs.oracle.com/javase/tutor...ets/index.html

Un saludo
Hola Falken

Probe el codigo de tu ejemplo, y no recibo respuesta por parte del dispositivo (tal como me esta pasando actualmente con el codigo que adjunte en el post original)... Igualmente, revise el link que adjuntaste en tu post, y revise el codigo que alli se encuentra, sin embargo, tampoco pude hacerlo funcionar

Si conoces de otra opcion o alternativa, seria de mucha ayuda

Muchas gracias por tu tiempo

P.D. Alguien sabe si es posible que la funcion socket_send de php realice una concatenacion interna de parametros (quizas en el mismo orden y tipo de dato que requiere el dispositivo)? Si esto es asi, seria posible realizar algo equivalente en Java

Última edición por dragonfire256; 07/04/2015 a las 08:12 Razón: Agregar P.D.
  #4 (permalink)  
Antiguo 07/04/2015, 09:02
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 3 meses
Puntos: 182
Respuesta: Enviar comandos a la impresora via socket

Cita:
Probe el codigo de tu ejemplo
Puedes poner como ha quedado el codigo tras hacer la adaptacion?
Has intentado seguir el tutorial que te he puesto por tu cuenta?


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #5 (permalink)  
Antiguo 07/04/2015, 11:04
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: Enviar comandos a la impresora via socket

Hola:

Viendo el código php y la primera versión java que pusiste, hay un par de detalles que no parecen estar bien.

Cuando en php envias socket_send($socket, $cmd, strlen($cmd), 0) sólo se envia el comando con su escape delante y su CR detrás. Cuando lo haces en java

output.writeShort(cmd.length());
output.writeBytes(cmd);

aparte del comando (con ESC y CR) estás enviando una longitud por delante que NO se envía en PHP. El parámetro strlen($cmd) de php es para que php sepa cuántos bytes enviar, pero ese valor no se envía por el socket.

Igual en la lectura, estás esperando recibir una longitud en primer lugar

input.readShort()

que php no espera recibir socket_recv($socket, $respuesta, strlen($respuesta), 0); y posiblemente la impresora no envíe. Nuevamente, strlen($respuesta) es para que php sepa cuántos bytes tiene que leer, pero ese valor no se está recibiendo del socket.

Al ir los comandos terminados en un CR y posiblemente las respuestas enviadas por la impresora también, la mejor forma de enviar y leer es la comentada por Profesor_Falken.

out.print(cmd)

o incluso

out.println(cmd); // sin que cmd lleve el retorno de carro.

y para leer, basta con

respuesta= in.readLine()

sin preocuparse de longitudes, porque eso ya lee hasta que llegue un retorno de carro.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #6 (permalink)  
Antiguo 07/04/2015, 12:17
 
Fecha de Ingreso: septiembre-2011
Ubicación: Caracas
Mensajes: 240
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: Enviar comandos a la impresora via socket

Cita:
Iniciado por Profesor_Falken Ver Mensaje
Puedes poner como ha quedado el codigo tras hacer la adaptacion?
Has intentado seguir el tutorial que te he puesto por tu cuenta?


Un saludo
Hola Falken

Aqui te anexo la version modificada

Código Java:
Ver original
  1. char ESC = (char)27; //Ascii character for Escape
  2. char CR = (char) 13; //Ascii character for Carriage Return
  3. //I make another stuff here
  4. Socket socket = null;
  5. PrintWriter out = null;
  6. BufferedReader in =null;
  7. String response;
  8. // Aqui hago la captura de la excepcion
  9. socket = new Socket(address,port);
  10. out = new PrintWriter(conec.getOutputStream(), true);
  11. in = new BufferedReader(new InputStreamReader(conec.getInputStream()));
  12. //Aqui continuo con la excepcion
  13. if (socket != null && in != null && out != null)
  14.             {
  15.                 try
  16.                 {
  17.                     String cmd=ESC+command+CR;
  18.                     out.print(cmd);
  19.  
  20.                         while ((response= in.readLine()) != null) {    
  21.                             System.out.println(response);
  22.                         }
  23.  
  24.                     out.close();
  25.                     in.close();
  26.                     socket.close();
  27.                 }
  28.                 catch (Exception e)
  29.                 {
  30.                     System.out.println(e.toString());
  31.  
  32.                 }
  33.             }
  #7 (permalink)  
Antiguo 07/04/2015, 12:23
 
Fecha de Ingreso: septiembre-2011
Ubicación: Caracas
Mensajes: 240
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: Enviar comandos a la impresora via socket

Cita:
Iniciado por chuidiang Ver Mensaje
Hola:

Viendo el código php y la primera versión java que pusiste, hay un par de detalles que no parecen estar bien.

Cuando en php envias socket_send($socket, $cmd, strlen($cmd), 0) sólo se envia el comando con su escape delante y su CR detrás. Cuando lo haces en java

output.writeShort(cmd.length());
output.writeBytes(cmd);

aparte del comando (con ESC y CR) estás enviando una longitud por delante que NO se envía en PHP. El parámetro strlen($cmd) de php es para que php sepa cuántos bytes enviar, pero ese valor no se envía por el socket.

Igual en la lectura, estás esperando recibir una longitud en primer lugar

input.readShort()

que php no espera recibir socket_recv($socket, $respuesta, strlen($respuesta), 0); y posiblemente la impresora no envíe. Nuevamente, strlen($respuesta) es para que php sepa cuántos bytes tiene que leer, pero ese valor no se está recibiendo del socket.

Al ir los comandos terminados en un CR y posiblemente las respuestas enviadas por la impresora también, la mejor forma de enviar y leer es la comentada por Profesor_Falken.

out.print(cmd)

o incluso

out.println(cmd); // sin que cmd lleve el retorno de carro.

y para leer, basta con

respuesta= in.readLine()

sin preocuparse de longitudes, porque eso ya lee hasta que llegue un retorno de carro.

Se bueno.
Hola Chui

Las cosas que me indicas en tu comentario tienen logica y sentido.. Algo que no entiendo es "sin que cmd lleve el retorno de carro." Le agrego el caracter de escape al principio y el retorno de carro, porque hacen parte del protocolo de comunicacion, segun el manual.. Igualmente, intentare enviar el comando sin el caracter de retorno de carro y te aviso que tal

Edito: No parece tampoco funcionar; llegue a la parte de readLine, y de ahi no avanza el programa

Muchas gracias por tu tiempo
  #8 (permalink)  
Antiguo 07/04/2015, 12:45
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: Enviar comandos a la impresora via socket

Hola:

Lo del retorno de carro es según uses out.print() o out.println(). La segunda forma lo añade automáticamente, así que no sería necesario que lo añadieras tú en el comando.

Si se te queda en el readLine(), o bien no está enviando nada la impresora, o está enviando algo que no termina en retorno de carro. Para verificar cual de las dos opciones es, vete leyendo byte a byte, cambia el while readLine por

Código Java:
Ver original
  1. int caracterLeido;
  2. while ((caracterLeido = in.read()) != -1) {
  3.     System.out.println(caracterLeido);
  4. }

Si va escribiendo código ascii, es que la impresora está devolviendo algo. Si no es que la impresora no envía nada. Si devuelve un CR al final, deberías ver el 13 en la salida.

De todas formas, el código que tienes actualmente

Código Java:
Ver original
  1. while ((response= in.readLine()) != null) {    
  2.        System.out.println(response);
  3. }

se quedará bloqueado en algún momento, ya que cuando la impresora deje de enviar respuestas y si ella no cierra el socket (no creo que lo haga), readLine se quedará bloqueado. Entiendo que cuando dices que se te queda bloqueado, es que ni siquiera ha enviado la primera respuesta (no sale el System.out.println(response).

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #9 (permalink)  
Antiguo 07/04/2015, 12:59
 
Fecha de Ingreso: septiembre-2011
Ubicación: Caracas
Mensajes: 240
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: Enviar comandos a la impresora via socket

Cita:
Iniciado por chuidiang Ver Mensaje
Hola:

Lo del retorno de carro es según uses out.print() o out.println(). La segunda forma lo añade automáticamente, así que no sería necesario que lo añadieras tú en el comando.

Si se te queda en el readLine(), o bien no está enviando nada la impresora, o está enviando algo que no termina en retorno de carro. Para verificar cual de las dos opciones es, vete leyendo byte a byte, cambia el while readLine por

Código Java:
Ver original
  1. int caracterLeido;
  2. while ((caracterLeido = in.read()) != -1) {
  3.     System.out.println(caracterLeido);
  4. }

Si va escribiendo código ascii, es que la impresora está devolviendo algo. Si no es que la impresora no envía nada. Si devuelve un CR al final, deberías ver el 13 en la salida.

De todas formas, el código que tienes actualmente

Código Java:
Ver original
  1. while ((response= in.readLine()) != null) {    
  2.        System.out.println(response);
  3. }

se quedará bloqueado en algún momento, ya que cuando la impresora deje de enviar respuestas y si ella no cierra el socket (no creo que lo haga), readLine se quedará bloqueado. Entiendo que cuando dices que se te queda bloqueado, es que ni siquiera ha enviado la primera respuesta (no sale el System.out.println(response).

Se bueno.
Hola Chui

Tal cual como dices, el programa se queda bloqueado; la ultima sugerencia que me indicaste, la probe, y tuve que cancelar el programa despues de dos minutos y no leyo ningun byte. Adicionalmente, la guia de programacion no es muy util, ya que no indica que informacion debe recibir o que tipo de datos envias; solamente indica los diferentes comandos y su utilidad
  #10 (permalink)  
Antiguo 08/04/2015, 01:00
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 3 meses
Puntos: 182
Respuesta: Enviar comandos a la impresora via socket

Buenas,

Despues de enviar el comando haz un flush y/o cierra el stream. Si no, se quedara en el buffer sin enviar:

String cmd=ESC+command+CR;
out.print(cmd);
out.flush();
out.close();


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #11 (permalink)  
Antiguo 08/04/2015, 07:09
 
Fecha de Ingreso: septiembre-2011
Ubicación: Caracas
Mensajes: 240
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: Enviar comandos a la impresora via socket

Cita:
Iniciado por Profesor_Falken Ver Mensaje
Buenas,

Despues de enviar el comando haz un flush y/o cierra el stream. Si no, se quedara en el buffer sin enviar:

String cmd=ESC+command+CR;
out.print(cmd);
out.flush();
out.close();


Un saludo
Hola Falken, que tal?

Probe colocando tus sugerencias en mi codigo, sin embargo haciendo flush(), al momento de recibir la informacion, se sigue quedando bloqueado; y si uso close(), el programa me da la excepcion java.net.SocketException: socket closed

Muchas gracias por su tiempo

Saludos
  #12 (permalink)  
Antiguo 08/04/2015, 07:45
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: Enviar comandos a la impresora via socket

Hola:

¿Tienes forma de ver que el comando llega correctamente a la impresora? Por ejemplo, enviando un comando que haga que la impresora haga algo que "se vea".

Si llega bien, el segundo punto a verificar es que la impresora envía una respuesta cuando le llega un comando. A ver si no estás recibiendo nada porque la impresora no envía nada. Para esto supongo que deberías mirar el manual de la impresora.

Finalmente, y también para verificar, herramientas como wireshark https://www.wireshark.org/ (o tcpdump si estás en linux) te permitirían ver los mensajes que van y vienen por la red, así podrás confirmar que efectivamente tu comando "sale" hacia la impresora y que la impresora envía una respuesta.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #13 (permalink)  
Antiguo 09/04/2015, 07:35
 
Fecha de Ingreso: septiembre-2011
Ubicación: Caracas
Mensajes: 240
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: Enviar comandos a la impresora via socket

Cita:
Iniciado por chuidiang Ver Mensaje
Hola:

¿Tienes forma de ver que el comando llega correctamente a la impresora? Por ejemplo, enviando un comando que haga que la impresora haga algo que "se vea".

Si llega bien, el segundo punto a verificar es que la impresora envía una respuesta cuando le llega un comando. A ver si no estás recibiendo nada porque la impresora no envía nada. Para esto supongo que deberías mirar el manual de la impresora.

Finalmente, y también para verificar, herramientas como wireshark https://www.wireshark.org/ (o tcpdump si estás en linux) te permitirían ver los mensajes que van y vienen por la red, así podrás confirmar que efectivamente tu comando "sale" hacia la impresora y que la impresora envía una respuesta.

Se bueno.
Hola Chui

Si, el comando le llega bien a la impresora; cuando le envio el comando via socket, observo que existe respuesta (mecanica o fisicamente hablando), pero la respuesta que debo recibir a traves del socket no me esta llegando, se queda bloqueado el programa (es decir, al momento de realizar el readLine, segun el ultimo ejemplo que tu y Falken me pasaron)
El manual de impresora no es muy claro, ya que solo indica que se le debe enviar los comandos con el caracter Escape al principio, seguido del comando como tal, y separando los parametros por punto y coma, y por ultimo el retorno de carro, sin embargo no indican como debe recibir la informacion ni en que formato la envia de regreso
Intentare con Wireshark a ver que tal

Saludos
  #14 (permalink)  
Antiguo 09/04/2015, 07:43
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: Enviar comandos a la impresora via socket

Hola:

Si probaste lo que te comenté de leer byte a byte, si la impresora envía algo, deberías ver los bytes sueltos, independientemente de en qué formato lo envíe. Si se queda bloqueado el read(), aparentemente la impresora no está enviando nada. La forma de confirmar que no envía nada (o que sí lo envía pero por algún motivo no lo lees) sería con wireshark.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #15 (permalink)  
Antiguo 09/04/2015, 11:48
 
Fecha de Ingreso: septiembre-2011
Ubicación: Caracas
Mensajes: 240
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: Enviar comandos a la impresora via socket

Cita:
Iniciado por chuidiang Ver Mensaje
Hola:

Si probaste lo que te comenté de leer byte a byte, si la impresora envía algo, deberías ver los bytes sueltos, independientemente de en qué formato lo envíe. Si se queda bloqueado el read(), aparentemente la impresora no está enviando nada. La forma de confirmar que no envía nada (o que sí lo envía pero por algún motivo no lo lees) sería con wireshark.

Se bueno.
Hola Chui, que tal?

Ya instale Wireshark, y lo he estado usando para capturar la trama que se envia al dispositivo... Probe el programa de PHP y el de Java, y en ambos casos, revise el valor en bytes que se envia a traves del socket, y la informacion se envia exactamente igual, y con la misma longitud claro esta; sin embargo, con el codigo php, el dispositivo si devuelve una respuesta, pero el codigo Java, se sigue bloqueando y no existe una trama de retorno, incluso si lo dejo varios minutos corriendo
  #16 (permalink)  
Antiguo 09/04/2015, 12:32
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: Enviar comandos a la impresora via socket

¿Ves la trama de retorno en wireshark?

Otro detalle, mirando cómo abres el socket ...

Código Java:
Ver original
  1. socket = new Socket(address,port);
  2. out = new PrintWriter(conec.getOutputStream(), true);
  3. in = new BufferedReader(new InputStreamReader(conec.getInputStream()));

¿qué es conec? ¿no debería ser socket.getInputStream() y socket.getOutputStream()?

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #17 (permalink)  
Antiguo 10/04/2015, 06:56
 
Fecha de Ingreso: septiembre-2011
Ubicación: Caracas
Mensajes: 240
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: Enviar comandos a la impresora via socket

Cita:
Iniciado por chuidiang Ver Mensaje
¿Ves la trama de retorno en wireshark?

Otro detalle, mirando cómo abres el socket ...

Código Java:
Ver original
  1. socket = new Socket(address,port);
  2. out = new PrintWriter(conec.getOutputStream(), true);
  3. in = new BufferedReader(new InputStreamReader(conec.getInputStream()));

¿qué es conec? ¿no debería ser socket.getInputStream() y socket.getOutputStream()?

Se bueno.
Hola Chui

Si, conec es el nombre que le di a mi socket.. Lo que pasa es que cambie los nombres de las variables, por nombres mas "genericos", pero se me paso ese

Solo veo la trama de retorno del codigo php, la de java nunca la veo, incluso si dejo el programa corriendo varios minutos
  #18 (permalink)  
Antiguo 10/04/2015, 10:23
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: Enviar comandos a la impresora via socket

Hola:

No tiene sentido. Si con wireshark ver la trama que va en php y java y son iguales, y con wireshark solo ves la trama de retorno si es php el que ha enviado el comando .... algo tiene que haber distinto en el comando.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #19 (permalink)  
Antiguo 10/04/2015, 14:06
 
Fecha de Ingreso: septiembre-2011
Ubicación: Caracas
Mensajes: 240
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: Enviar comandos a la impresora via socket

Cita:
Iniciado por chuidiang Ver Mensaje
Hola:

No tiene sentido. Si con wireshark ver la trama que va en php y java y son iguales, y con wireshark solo ves la trama de retorno si es php el que ha enviado el comando .... algo tiene que haber distinto en el comando.

Se bueno.
Hola Chui

Ya hemos conseguido la solucion aqui en la oficina, despues de varios dias luchando
Te adjunto el codigo

Código Java:
Ver original
  1. char ESC = (char)27; //Caracter de escape
  2. char CR = (char) 13; //Caracter de retorno de carro
  3. //Aqui hago otras declaraciones
  4. Socket socket = null;
  5. OutputStream output = null;
  6. BufferedReader reader= null;
  7. try
  8. {
  9. socket= new Socket(address,port);
  10. socket.setSoTimeout(5000);
  11. output = socket.getOutputStream();
  12. reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  13. }//Aqui continuo con el manejo de excepciones
  14. if (socket!= null  && output != null)
  15.             {
  16.                 try
  17.                 {
  18.                     String cmd=ESC+command+CR;
  19.                     output.write(cmd.getBytes());
  20.                     output.flush();
  21.                     socket.shutdownOutput();
  22.                    
  23.                     response = reader.readLine();
  24.                    
  25.                     System.out.println(respuesta.toString());
  26.                                        
  27.                     output.close();
  28.                     socket.close();
  29.                 }
  30.  
  31.                 catch (Exception e)
  32.                 {
  33.                     System.out.println(e.toString());
  34.                    
  35.                 }
  36.             }

La diferencia la marca la linea socket.shutdownOutput();. ya que cierra el socket para la salida de datos; probablemente, el dispositivo no puede manejar informacion entrante y saliente, solo puede manejar informacion en un solo sentido, por lo que se quedaba bloqueado el programa al momento de recibir la respuesta (esto lo asumo, debido a que el manual no es muy claro con respecto al tema)

Muchas gracias a ti y a Falken, por su tiempo y disposicion para ayudar

Saludos
  #20 (permalink)  
Antiguo 11/04/2015, 06:35
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 3 meses
Puntos: 182
Respuesta: Enviar comandos a la impresora via socket

Buenas,

He trabajado muchas veces con sockets y nunca había necesitado utilizar esa opción. De hecho ni sabía que existía. Una cosa más que aprendo, gracias.

He encontrado aquí una explication en SO bastante completa:
http://stackoverflow.com/questions/1...shutdownoutput


Un saludo
__________________
If to err is human, then programmers are the most human of us

Etiquetas: comandos, impresora, socket, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:45.