gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:17:18 26 4
gpt4 key购买 nike

我正在尝试通过套接字向证卡打印机发送命令,但无法使其工作。现在,我有一个用 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 并通过套接字将命令发送到打印机时,却根本无法工作。我已经阅读了手册,但根本没有帮助

P.D.打印机品牌为Evolis

P.D. 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();,因为我认为设备无法同时发送和接收数据,所以如果你想要来自设备,您必须先关闭输出(手册根本没有帮助,所以我现在猜测)

感谢大家的帮助

关于java - Java中通过socket发送打印机命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29472618/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com