我正在尝试通过套接字向卡片打印机发送命令,但我无法使其正常工作。现在,我有一个用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对不起,如果我没有得到很好的解释,但英语不是我的第一语言
提前致谢
答案 0 :(得分:1)
我终于找到了解决方案。让我与你分享
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(); ,因为我认为设备无法同时发送和接收数据,因此如果您需要来自设备,你必须先关闭输出(手册根本没有帮助,所以我现在猜测)
感谢大家的帮助