Номер порта принтера Zebra KR403

Я пытаюсь печатать на принтере 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. Я также пробовал использовать порт 6101, который используется некоторыми принтерами Zebra, но безуспешно.

Я могу запустить команду dos

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

Это печатает и доказывает, что он каким-то образом прослушивает сеть внутри. Это устройство представляет собой USB-принтер, и это усложняет установку статического идентификатора порта. Возможно, также странно, что приведенная выше команда печатает штрих-код, но не разрезает бумагу; когда я печатаю с помощью блокнота (который, как я предполагаю, не использует сеть для печати), он режет бумагу, но длина бумаги составляет 40 см (очень большая).

Что я надеюсь сделать, так это отправить команду печати с помощью C # и использовать команды ZPL для печати. ​​Microsoft также написала статью о необработанной печати, но на этом принтере она не работает.

Все, что я хочу сделать, это отправить инструкции ZPL на этот принтер. Также попробовал универсальный драйвер txt, он работает для блокнота, но не для С#.

Используемый код:

   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");
        }
    }

  }
  }

person user613326    schedule 28.02.2013    source источник
comment
принтер установлен на вашей машине? В настройках принтера должен отображаться порт, к которому он подключен, на панели управления.   -  person Brad Christie    schedule 28.02.2013
comment
Да, но там, где обычно читается номер порта, я вижу, что USB0001 не то, что я могу использовать.   -  person user613326    schedule 28.02.2013


Ответы (4)


Вы не можете использовать TcpClient для подключения к локально подключенному устройству, например USB. TcpClient предназначен для сетевых устройств. Если вы поместите свой принтер в сеть, вы можете использовать TcpClient.

person Ovi Tisler    schedule 28.02.2013
comment
Принтер был общим. Небольшое доказательство того, что команда DOS Print работала только при использовании общего имени принтера. Однако номер порта не был раскрыт / (и я пробовал намного больше) - person user613326; 01.03.2013
comment
Это правильный ответ на ваш актуальный вопрос. Вы не можете использовать сетевое соединение для отправки на локально подключенное устройство. Если бы вместо этого у вас был принтер в сети, вы могли бы поменять 127.0.0.1 (localhost) на имя хоста или IP-адрес принтера, и вы бы прошли большую часть пути. - person Roger Willcocks; 09.05.2014

Хорошо, после некоторых психических срывов (это не шутки), так как я весь день пытался заставить этот принтер работать. Наконец-то мне удалось распечатать на этом принтере с помощью RawPrinterHelper, и я также исправил небольшую ошибку в этом помощнике.

Я рад поделиться им, но не знаю, как поделиться небольшим проектом Visual Studio 10. Если кто-нибудь знает, как это сделать, я опубликую его.

Мой код теперь может печатать на локальном USB-принтере и без диалогового окна / и я могу резать бумагу.

(пожалуйста, просто прокомментируйте, как опубликовать prj)

person user613326    schedule 28.02.2013

Обходной путь для этих случаев — предоставить общий доступ к USB-принтеру, а затем сопоставить порт LTP с ресурсом с помощью команды net use.

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

затем с помощью вашего приложения вы можете записать строку непосредственно в порт LTP1, и она будет напечатана.

person Phra Tankian    schedule 04.12.2013

В конце концов мы реконструировали сигнализацию, написали для нее необработанный USB-драйвер, а затем использовали язык разметки зебры для печати. Это глубоко вложено в другой код, и, к сожалению, я не могу поделиться им.

Этот язык сам по себе также не очень удобен для работы. Вам нужно подумать о состояниях буферов, обрабатывающих коды ошибок, и о том, что принтеры перестают отвечать на запросы, вам понадобятся некоторые проверки в реальном времени - и т. Д. И т. Д.

Поэтому, если вы можете использовать драйверы Windows, и ваш принтер не критичен, попробуйте это, в противном случае напишите свой собственный необработанный драйвер и научитесь понимать все двоичные коды ошибок, и имейте в виду, что принтеры даже с громкими именами все еще легко застревают, поэтому для меня, если бы у меня был выбор, я бы отказался от этого принтера или был готов к большому проекту с несколькими кошмарами. Это будет стоить вам нескольких недель, если вам придется начинать с нуля.

person user613326    schedule 06.12.2013