07/04/2015, 11:04
|
| 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. |