通过套接字与标签打印机打开 TCP/IP 连接

问题描述 投票:0回答:1

我想打开与 Zebra 打印机的 TCP/IP 连接以发送 ZPL 命令进行打印。我可以使用 NodeJS 做到这一点,但不能使用 Web 套接字。

NodeJS

var s = require('net').Socket();
s.connect(9100, '192.168.0.99');
s.write(zpl_commands);

但是无法在websocket上发送命令,我不想用NodeJS制作一个打印的中间服务器。知道我是否能实现这一目标吗?我已经尝试制作一个 chrome 插件但没有成功。

我的网络套接字代码

const socket = new WebSocket('ws://192.168.0.99:9100');

socket.send(message);

我需要使用Chrome,因为我通过串口连接称重机。这是一个可能的解决方案,通过电缆将打印机连接到计算机(但我想通过wifi,这样我可以从多个终端进行打印) 注意:如果在我的浏览器中输入 ws://... 我可以连接到打印机“printServer” 注2:打印机是Zebra ZD420

javascript node.js zebra-printers
1个回答
0
投票

正如我在评论中指出的,打印机不支持 WebSocket 端点,您可以在其中向其发送命令。

您必须编写/使用一个代理来创建 WebSocket/HTTP 端点,该端点将发送给它的数据转发到连接到打印机的底层 TCP 套接字。

const { WebSocketServer, createWebSocketStream } = require("ws");
const { Socket } = require("net");



const { 
    WEBSOCKET_HOST, 
    WEBSOCKET_PORT, 
    PRINTER_HOST, 
    PRINTER_PORT 
} = Object.assign({
    WEBSOCKET_HOST: "127.0.0.1",
    WEBSOCKET_PORT: "8320",
    PRINTER_HOST: "127.0.0.1",
    PRINTER_PORT: "1900"
}, process.env);


const server = new WebSocketServer({
    port: Number(WEBSOCKET_PORT),
    host: WEBSOCKET_HOST
});


server.once("listening", () => {
    console.log(`WebSocket server listening on ws://${WEBSOCKET_HOST}:${WEBSOCKET_PORT} for connections`);
});


server.on("connection", (ws) => {

    let socket = new Socket();
    let stream = createWebSocketStream(ws);

    socket.once("connect", () => {
        console.log("Connected to printer");
    });

    // pipe data from websocket to tcp socket
    // pipe data from tcp socket to websocket
    stream.pipe(socket);
    socket.pipe(stream);

    // connecto to printer via tcp socket
    socket.connect(Number(PRINTER_PORT), PRINTER_HOST);

});

上面的代码非常简单直接。

它创建一个 HTTP/WebSocket 服务器/端点,客户端(如浏览器、wscat 等)可以连接到该服务器/端点,然后创建一个到打印机的 TCP 套接字。

您可以使用 netcat 和 wscat 进行测试。

首先,通过以下方式创建一个虚拟 TCP 服务器/打印机:

nc -l -p 1900
。 这告诉 netcat 在端口 1900 上的环回接口 (127.0.0.1) 上为传入请求创建一个 tcp 套接字。

启动上面的WebSocket代理(通过

npm install ws
安装websocket模块后):
node tcp-ws-proxy.js

最后,通过 WebSocket CLI 客户端连接

wsct --connect ws://127.0.0.1:8320
并输入一些数据,例如“你好网猫”。

无论您输入什么,都应该打印在 netcat 控制台/终端/输出上。

这允许您通过 WebSocket 客户端(如浏览器)连接到您的打印机。

© www.soinside.com 2019 - 2024. All rights reserved.