通过Java中的socket发送打印机命令

我正在尝试通过套接字向卡片打印机发送命令,但我无法使其正常工作。 现在,我有一个用PHP开发的程序,它正在运行,但我需要让它在Java中运行。 PHP中的程序是这样的:

$ESC = chr(27); //Ascii character for Escape $CR = chr(13); // Ascii character for Carriage Return $cmd = $ESC . $command . $CR; socket_send($socket, $cmd, strlen($cmd), 0); socket_recv($socket, $respuesta, strlen($respuesta), 0); 

在Java中,我正在做这样的事情

 char ESC = (char)27; //Ascii character for Escape char CR = (char) 13; //Ascii character for Carriage Return ////////////// Socket socket = null; DataInputStream input = null; DataOutputStream output = null; // I make another stuff here socket = new Socket(address,port); input = new DataInputStream (socket.getInputStream()); output = new DataOutputStream (socket.getOutputStream()); //I make another stuff here if (socket != null && input != null && output != null) { try { String cmd=ESC+command+CR; byte[] message = cmd.getBytes(); output.writeShort(cmd.length()); output.writeBytes(cmd); message = new byte[input.readShort()]; input.readFully(message); response = new String(message); salida.close(); entrada.close(); conec.close(); } catch (Exception e) { System.out.println(e.toString()); } } 

我试过不同类型的数据:int,UTF-8,long等,但似乎不起作用。 我不知道打印机是否需要更多信息,或者我发送错误类型的数据

让我总结一下:PHP中的代码工作得很好,但是当我试图将该代码转换为Java,并通过套接字将命令发送到打印机时,却根本不起作用。 我已经阅读了手册,但根本没有帮助

PD打印机的品牌是Evolis

PD 2对不起,如果我没有得到很好的解释,但英语不是我的第一语言

提前致谢

我终于找到了解决方案。 让我与你分享

 char ESC = (char)27; //Ascii character for ESCAPE char CR = (char) 13; //Ascii character for Carriage Return ///////////// Socket socket = null; OutputStream output= null; BufferedReader reader= null; /////////// try { socket = new Socket(address,port); socket.setSoTimeout(5000); output = socket.getOutputStream(); reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); } catch (UnknownHostException e) {etc... } ///////// if (socket != null && output != null) { try { String cmd=ESC+command+CR; output.write(cmd.getBytes()); output.flush(); socket.shutdownOutput(); response = reader.readLine(); System.out.println(response.toString()); output.close(); socket.close(); } catch (Exception e) { System.out.println(e.toString()); } } 

这个解决方案的关键是方法socket.shutdownOutput(); ,因为我认为设备无法同时发送和接收数据,所以如果你想要设备的响应,你必须先关闭输出(手册根本没有帮助,所以我猜对了现在)

谢谢大家的帮助