Cita:
Iniciado por chuidiang 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