Ver Mensaje Individual
  #7 (permalink)  
Antiguo 07/04/2015, 12:23
dragonfire256
 
Fecha de Ingreso: septiembre-2011
Ubicación: Caracas
Mensajes: 240
Antigüedad: 12 años, 7 meses
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