我正在制作一个程序,通过 C# 中的套接字使用 ESC/POS 命令与 Epson TM-T88IV 打印机通信。当我在盖子关闭且纸张已满的情况下发送 DLE EOT n 命令时,它会立即在字节数组中返回正确的代码。但是,当我打开盖子或取出纸张以尝试模拟错误时,没有 DLE EOT 命令(1、2、3 或 4)将返回任何内容。 socket.receive 方法只是挂起,直到它超时。我能够打印到这台打印机并进行换行、剪切等操作。
这是我的代码:
public class clsPrinter
{
TcpListener server;
MemoryStream ms = new MemoryStream();
BinaryWriter bw;
Socket clientSock = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
string printerIP;
Encoding enc = Encoding.ASCII;
public clsPrinter(string printerIP)
{
this.printerIP = printerIP;
bw = new BinaryWriter(ms);
clientSock.NoDelay = true;
clientSock = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse(printerIP);
IPEndPoint remoteEP = new IPEndPoint(ip, 9100);
clientSock.Connect(remoteEP);
}
public void getPrinterStatus()
{
try
{
byte[] byData = new byte[] { 16, 4, 1 }; // DLE EOT 1
sendToPrinter(byData);
byte[] bytes = new byte[1024];
int bytesReceived = clientSock.Receive(bytes);
}
catch (Exception ex)
{
}
}
public void sendToPrinter(byte[] byteStream)
{
clientSock.Send(byteStream);
}
有什么想法吗?
最佳答案
当机盖打开或缺纸时,打印机未处于就绪状态。我认为该方法(或打印机驱动程序)无法将 DLE EOT X 发送到没有就绪状态的打印机。
关于c# - 爱普生 ESC/POS 命令 DLE EOT n 没有返回响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28160621/