[英]How to send commands and receive responses to OSGi console via a Java Socket?
[英]Send printer commands via socket in Java
我正在嘗試通過套接字將命令發送到證卡打印機,但是我無法使其工作。 現在,我有一個用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();。 ,因為我認為該設備無法同時發送和接收數據,所以如果要從該設備響應,則必須先關閉輸出(手冊完全沒有幫助,所以我猜對了現在)
謝謝大家的幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.