c# - 爱普生 ESC/POS 命令 DLE EOT n 没有返回响应

标签 c# .net sockets printing epson

我正在制作一个程序,通过 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/

相关文章:

c# - 正则表达式 : extract a substring from a formatted value

c# - 以编程方式将 ObservableCollection 绑定(bind)到 ListBox

.net - sql server中日期时间的比较

C#:异步运行此代码的不同方法?

java - 无法通过广播地址接收 UDP 数据包,ArtNet

java - ServerSocket代码适用于PC,不适用于Android

c# - “Microsoft.ace.oledb.12.0”未读取服务器上 .xlsx 文件中的所有行 (IIS7)

c# - 如何模仿OnBackPressed Xamarin测试云?

c# - .NET 中设置的可观察顺序?

c++ - boost ASIO socket 是否自动使用多个网络接口(interface)?有效率的?如果没有,怎么办?