Как получать сообщения обратной связи с порта принтера 9100 через протокол AppSocket/JetDirect?Android

Форум для тех, кто программирует под Android
Ответить
Гость
 Как получать сообщения обратной связи с порта принтера 9100 через протокол AppSocket/JetDirect?

Сообщение Гость »


Я пытаюсь получить информацию о состоянии принтера, конфигурации и типе принтера (по протоколу AppSocket/JetDirect, также известному как Raw или JetDirect, по умолчанию используется порт TCP 9100), использую связь через сокет Java в моем приложении для Android.
>
Обычно принтер ответит о типе принтера, если мы отправим «@PJL INFO ID» (PJL:Printer Job Language) на порт принтера 9100.
so я пытаюсь сделать это с помощью Java-кода, вот так.

Код: Выделить всё

    // check if user cliek the button we call WifiPrinter to create object
if(view.getId() ==R.id.btn_pdf_print){
WifiPrinter.CrazyThreadPool.THREAD_POOL_EXECUTOR.execute(new Runnable() {
@Override
public void run() {
WifiPrinter wifiPrintHelper = new WifiPrinter("172.18.*.*", 9100); // call WifiPrinter constructor
}
});

// WifiPrinter constructor will call getInfo() function
public WifiPrinter(String ip, int port) {
mEncode = StandardCharsets.UTF_8.name();
this.mIp = ip;
this.mPort = port;
try {
if (mSocket != null) {
closeIOAndSocket();
} else {
mSocket = new Socket();
}
mSocket.connect(new InetSocketAddress(mIp, mPort));
mInputStream = mSocket.getInputStream();
mOutputStream = mSocket.getOutputStream();
mWriter = new OutputStreamWriter(mOutputStream, mEncode);
mReader = new InputStreamReader(mInputStream, mEncode);
getInfo();  // send pjl command
} catch (Exception e) {
Log.e(TAG, "create object error:" + e.toString());
}
}

// send command and receive information from socket InputStream
public void getInfo() {
Log.i(TAG, "getInfo start.");
String cmd = "@PJL INFO ID";
try {
// send command to printer 9100 port
byte[] content = cmd.getBytes(mEncode);
mOutputStream.write(content);
mOutputStream.flush();

// read data from socket
char[] data = new char[1024];
int size = mReader.read(data);
Log.i(TAG, "receive size=" + size + ", info:" + Arrays.toString(data));
} catch (IOException e) {
Log.e(TAG, "get info exception:" + e.getMessage());
}
Log.i(TAG, "getInfo end!");
}
но вывод логарифма

Код: Выделить всё

2024-03-07 11:29:47.467  8312-8383  WifiPrinter    I  getInfo start.
2024-03-07 11:30:47.512  8312-8383  WifiPrinter    E  get info exception:Connection reset
2024-03-07 11:30:47.512  8312-8383  WifiPrinter    I  getInfo end!
Почему я не могу получить правильное сообщение? где проблема в моем коде? Как получить информацию об ответе принтера через сокет Java из порта принтера 9100?
Кто может мне помочь, пожалуйста!
Я использую инструмент NC для тестирования и обнаружил, что он работает хорошо.< /p>

Код: Выделить всё

D:\workspace
$ nc -vn 172.18.*.* 9100
(UNKNOWN) [172.18.*.*] 9100 (?) open

@PJL INFO ID
@PJL INFO ID
"FUJI XEROX DocuCentre-V C3373 T2"

@PJL INFO STATUS
@PJL INFO STATUS
CODE=10023
DISPLAY=""
ONLINE=TRUE
когда отправлю

Код: Выделить всё

"@PJL INFO ID"
принтер отвечает двумя строками информации моему клиенту инструмента ЧПУ.

Код: Выделить всё

"@PJL INFO ID"
"FUJI XEROX DocuCentre-V C3373 T2"


Источник: https://stackoverflow.com/questions/781 ... psocket-je
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»