C# Zebra打印机KR403端口号

C# Zebra打印机KR403端口号,c#,zebra-printers,C#,Zebra Printers,我试着用zebra打印机打印。 Zebra为我提供了一个C语言的标准代码示例# 在那里,他们使用端口9100连接到打印机 System.Net.Sockets.TcpClient client = new System.Net.Sockets.TcpClient(); client.Connect("127.0.0.1", 9100); 但是,每次我运行这段代码时,它都会崩溃,因为没有这样的端口号可用 我还使用了telnet 127.0.01 9100,这证实了没有人在收听9

我试着用zebra打印机打印。 Zebra为我提供了一个C语言的标准代码示例# 在那里,他们使用端口9100连接到打印机

    System.Net.Sockets.TcpClient client = new System.Net.Sockets.TcpClient();

    client.Connect("127.0.0.1", 9100);
但是,每次我运行这段代码时,它都会崩溃,因为没有这样的端口号可用 我还使用了telnet 127.0.01 9100,这证实了没有人在收听9100 我还尝试了一些Zebra打印机使用的端口6101,但也没有成功

我可以在dos命令中运行

    print /D:\\127.0.0.1\KR403 d:\print.txt
这确实会打印出来,并证明它以某种方式监听网络 内部。这个设备是一个USB打印机,这使得设置一个静态端口ID变得复杂。也许同样奇怪的是,上面的命令确实打印条形码,但不剪切纸张;当我使用记事本打印时(我假设它不使用网络打印),它会切纸,但纸是40厘米长(非常大)。。所以我在驾驶者战斗中

我希望做的是使用C#发送一个print命令,并使用ZPL命令进行打印 微软也写了一篇关于原始打印的文章,但在这台打印机上失败了

我要做的就是将ZPL指令发送到此打印机。 还尝试了通用txt驱动程序,它适用于记事本,但不适用于C#

使用的代码:

   using System;
   using System.Collections.Generic;
   using System.ComponentModel;
   using System.Data;
   using System.Drawing;
   using System.Linq;
   using System.Text;
   using System.Windows.Forms;

   // print /D:\\127.0.0.1\KR403 d:\print.txt


  namespace PrinterTest
  {
  public partial class Form1 : Form
  {
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        // Printer IP Address and communication port
        string ipAddress = @"192.168.2.109";
        int port = 6101; // 9100;//

        // ZPL Command(s)
        string ZPLString =
            "^XA" +
            "^FO50,50" +
            "^A0N50,50" +
            "^FDHello, World!^FS" +
            "^XZ";

        try
        {
            // Open connection
            System.Net.Sockets.TcpClient client = new System.Net.Sockets.TcpClient();
            //client.Connect(ipAddress, port);
           client.Connect(ipAddress, port);
           // string tmp = "\\127.0.0.1\KR403";
           // client.Connect(@"\\localhost",9100);



            // Write ZPL String to connection
            System.IO.StreamWriter writer = new System.IO.StreamWriter(client.GetStream());
            writer.Write(ZPLString);
            writer.Flush();

            // Close Connection
            writer.Close();
            client.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error");
        }
    }

  }
  }

您不能使用
TcpClient
连接到本地连接的设备,如USB。TcpClient用于网络设备。如果将打印机置于网络上,则可以使用
TcpClient

在一些精神崩溃后还行(不是开玩笑) 因为我一整天都在努力让这台打印机工作。 我终于用RawPrinterHelper打印到了这台打印机上, 我还修复了助手中的一个小错误

我很高兴与大家分享,但不知道如何分享一个小的VisualStudio10项目 如果有人知道怎么做,我就把它贴在这里

我的代码现在可以打印到本地USB打印机上,而且不需要对话框,我还可以剪纸


(请就如何发布prj发表评论)

这些情况的解决方法是共享usb打印机,然后使用net use命令将LTP端口映射到资源

NET USE LPT1: \\[computer_ip]\[printer_sharname] /PERSISTENT:YES

然后,您可以使用应用程序将字符串直接写入LTP1端口,然后它将打印。

最后,我们对信号进行了反向工程,为其编写了原始USB驱动程序,然后使用zebra标记语言进行打印。这在其他代码中嵌套得很深,很遗憾,我无法共享它

这种语言本身也不是很好用。 您需要考虑缓冲区状态处理错误代码,打印机停止响应,您需要一些实时检查-等等


因此,如果您可以使用Windows驱动程序,并且您的打印机并不重要,请尝试使用Windows驱动程序,否则请编写您自己的原始驱动程序,并学习理解所有二进制错误代码,请记住,即使是大型打印机也很容易堵塞,因此,如果我有选择的话,我会说放弃这台打印机,或者准备好一个大项目,做一些噩梦。如果您必须从头开始,则需要花费几周时间。

您的机器上是否安装了打印机?打印机设置应在控制面板中显示其连接的端口。是的,但在它通常读取端口号的地方,我发现USB0001不是我可以使用的。打印机被共享了一点证据DOS Print命令仅在使用打印机的共享名时才起作用。。但是没有透露端口号/(我尝试了很多)这是您实际问题的正确答案。无法使用netowrk连接发送到本地连接的设备。如果您将打印机放在网络上,您可以将127.0.0.1(localhost)替换为打印机的主机名或IP地址,这样您就可以完成大部分工作。