Ver Mensaje Individual
  #5 (permalink)  
Antiguo 07/04/2015, 11:04
Avatar de chuidiang
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