这很奇怪,我们有一个打印机设置,它有一个 IP 和它监听的端口,然后我们需要将打印作业发送到打印机。
我已经设法连接到打印机,但是每当我传输任何东西时,我都会在打印机上超时,或者它只是坐在那里什么都不做。
我知道我可以与打印机交谈,因为它显示在它的日志中。
到目前为止,我有以下内容:
_Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
_Socket.Connect("192.168.1.52", 2123);
byte Enq = 0x05;
byte Ack = 0x06;
byte[] tran;
tran = new byte[] { Enq };
_Socket.Send(tran, 1, SocketFlags.None);
tran = new byte[] { 0x30 };
_Socket.Send(tran, 1, SocketFlags.None);
tran = new byte[] { 0x00, 0x01 };
_Socket.Send(tran, 2, SocketFlags.None);
tran = new byte[] { 0xFF };
_Socket.Send(tran, 1, SocketFlags.None);
根据手册,我需要执行以下操作:
send 1 byte Identifier 30h
send 2 bytes length 00h, 01h
send data (action to be performed) 1 byte FFh
正如您可能看到的,我不知道如何实现这一点,所以欢迎任何和所有帮助
Edit
一些附加信息,打印机没有附带驱动程序,所以据我所知,我需要将原始数据传输到打印机,打印机有一个串行连接,但它距离串行电缆太远,因此以太网连接在那里(我相信它是以太网串行)。
Dialog 的一般原理 计算机发送 ENQ(1 字节) 打印机发送 ACK(1 字节) 计算机发送数据(Ident 1 字节 | 长度 2 字节 | 数据 0 到 n 字节 | 校验和 1 字节) 打印机发送 Ack(1 字节)
当我过去使用串行时,我使用端口上的写入功能来发送数据,将数据放入缓冲区,一旦完成接收检查缓冲区,但我对如何在 IP 上执行此操作一无所知?
Identifier (1 hexadecimal byte)
Specific to each command.
Length (2 hexadecimal bytes)
The length is a hexadecimal value representing the number of bytes present after the
two length bytes and not including the check byte (Checksum).
In general, the maximum value is 2044 bytes or 07h FCh.
For transmission of a message for printing, the maximum value is 4092 bytes or 0Fh
FCh.
Note: The check byte is not checked by the printer if b7 of the first length byte is set
to 1. In this case the data in the frame received is not checked.
Data (0 to n bytes)
Zero bytes for a general request from the computer to the printer.
n bytes representing the instructions needed to define a function.
Checksum (1 hexadecimal byte)
This corresponds to an exclusive OR of all preceding bytes (identifier, length and data
bytes