0

Zebra プリンタと通信するプログラムがあります。このプログラムは WM デバイス (Motorola ES400) で実行され、MZ320 では非常に信頼性がありますが、iMZ320 ではそうではありません。デバイスでは、BluetoothClient (InTheHand) を使用します。iMZ320 では、プログラムは非常に頻繁に例外をスローします。

エラー メッセージが表示される前に、プログラムは 80 秒間待機します。(ただし、ES400 でのみ - 確立された接続がホスト マシンのソフトウェアによって中止されました)。この間、プリンターは Bluetooth 接続が開いていることを示します (青色の LED)。プリンターがオフの場合、別のメッセージが表示されますが、わずか 6 秒後に (ターゲット マシンがアクティブに拒否したため、接続を確立できませんでした)。これが発生した後、ES400 上のプログラムは、プリンターを再起動するまで iMZ と通信できません。

質問:なぜそれが起こっているのか、そして私たちに何ができるのか誰か知っていますか?

サンプルコード:

    public static Boolean BluetoothPrintES400(String label)
    {

      BluetoothRadio.PrimaryRadio.Mode = RadioMode.Connectable;
      System.Threading.Thread.Sleep(1000);

      BluetoothAddress btAddress;
      btAddress = BluetoothAddress.Parse("ab465as34jd3");
      BluetoothClient btClient = new BluetoothClient();

      try
          {
              btClient.Connect(new BluetoothEndPoint(btAddress, BluetoothService.SerialPort));
          }
      catch (Exception ex)
          {
              message = ex.Message;
              return false;
          }
      Encoding e = Encoding.GetEncoding("iso-8859-2");

      label = label + "\r\n";
          int x, y;
          for (int i = 0; i < ((int)(label.Length / 500)) + 1; i++)
          {
              x = i * 500;
              y = 500;
              if ((x + y) > label.Length)
              {
                  y = label.Length - x;
              }
              byte[] configLabel = e.GetBytes(label.ToCharArray(), x, y);
              //connection.Write(configLabel);
              NetworkStream ns = btClient.GetStream();
              ns.Write(configLabel, 0, configLabel.Length);
          }

       btClient.Close();

       return true;
    }

約 80 秒後の最初の例外:

メッセージ:

    An established connection was aborted by the software in your host machine

スタックトレース:

    - System.Net.Sockets.Socket.ConnectNoCheck()
    - System.Net.Sockets.Socket.Connect()
    - InTheHand.Net.Sockets.BluetoothClient.Connect()
    - Project.Utility.Util.BluetoothPrintES400()
    - Project.Forms.FrmMain.printing()
    - Project.Forms.FrmMain.mniNext_Click()
    - System.Windows.Forms.MenuItem.OnClick()
    - System.Windows.Forms.Menu.ProcessMnuProc()
    - System.Windows.Forms.Form.WnProc()
    - System.Windows.Forms.Control._InternalWnProc()
    - Microsoft.AGL.Forms.EVL.EnterMainLoop()
    - System.Windows.Forms.Application.Run()
    - Project.Program.Main()

再度印刷しようとすると、約 6 秒後に 2 番目の例外が発生します。

メッセージ:

    No connection could be made because the target machine actively refused it

スタックトレース:

    - System.Net.Sockets.Socket.ConnectNoCheck()
    - System.Net.Sockets.Socket.Connect()
    - InTheHand.Net.Sockets.BluetoothClient.Connect()
    - Project.Utility.Util.BluetoothPrintES400()
    - Project.Forms.FrmMain.printing()
    - Project.Forms.FrmMain.mniNext_Click()
    - System.Windows.Forms.MenuItem.OnClick()
    - System.Windows.Forms.Menu.ProcessMnuProc()
    - System.Windows.Forms.Form.WnProc()
    - System.Windows.Forms.Control._InternalWnProc()
    - Microsoft.AGL.Forms.EVL.EnterMainLoop()
    - System.Windows.Forms.Application.Run()
    - Project.Program.Main()
4

0 に答える 0