我想打开与 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
正如我在评论中指出的,打印机不支持 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 客户端(如浏览器)连接到您的打印机。