zoukankan      html  css  js  c++  java
  • 用以太网通讯读写条码扫描头

    把通讯封装成一个类“

    该程序的特点有优势:

        传统写法当条码扫描头停机、异常断电、网络异常等,通讯终端后,程序无法正常恢复连接,丢失数据引发故障,我写的程序,无论扫描头断电还是产线重启,都能第一时间重启连接并通讯上,稳定性很好。

         这个也是在一个朋友老程序不断出问题后,找我帮忙,我给重新写的,试用后效果很不过,非常好用,再也没有发生过问题。

         如果您有硬件的通讯访问难点和项目,可以联系我解决,譬如 RS232 485 422 串口通讯、以太网接口的仪器仪表通讯、OPC Server自动化数据PLC访问都可以,欢迎练习我 邮箱: 458978@qq.com  加我QQ 458978 验证填,你从博客园知道我QQ号码的即可!

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Net;
    using System.Net.Sockets ;
    using System.Threading;
    
    namespace CodeReaderClient.ConnectType
    {
        /// <summary>
        /// 458978@qq.com
        /// Niewei 苏州 2016-09-10
        /// </summary>
     public    class TCPConnectClass
        {
         /// <summary>
         /// 以太网通讯对象
         /// </summary>
         public  TcpClient MyTcpClient;
         /// <summary>
         /// 数据流操作
         /// </summary>
         public NetworkStream MyNetworkStream;
         /// <summary>
         /// 条码结果
         /// </summary>
         public string BarCodeStr = string.Empty;
         /// <summary>
         /// IP地址
         /// </summary>
         public  string _IPAddressStr = string.Empty;
    
         /// <summary>
         /// 通讯端口
         /// </summary>
         public int _Port = 8080;
         /// <summary>
         /// 初始化
         /// </summary>
         /// <param name="IPAddressStr"></param>
         /// <param name="Port"></param>
         public TCPConnectClass (string IPAddressStr,int Port)
         {
             _IPAddressStr = IPAddressStr;
             _Port = Port;
             MyTcpClient = new TcpClient();
             Thread Td = new Thread(RunPorcedue);
             Td.IsBackground = true;
             Td.Start();
         }
       
    
         /// <summary>
         /// 连接检查方法,保持断线重连
         /// </summary>
         public  void Connect()
         {
             try
             {
                 if (!MyTcpClient.Connected)
                 {
                     IPAddress IPAddress1 = IPAddress.Parse(_IPAddressStr);
                     MyTcpClient = new TcpClient();
                     MyTcpClient.Connect(IPAddress1, _Port);
                     MyNetworkStream = MyTcpClient.GetStream();
                 }
    
                 if (MyTcpClient.Connected)
                 {
                     MyNetworkStream = MyTcpClient.GetStream();
                     byte[] Buffer = new byte[] { 0x41 };
                     MyNetworkStream.Write(Buffer, 0, 1);
                 }
    
             }
             catch (Exception)
             {
                 
             }
         }
    
         /// <summary>
         /// 循环工作线程
         /// </summary>
         private void  RunPorcedue()
         {
    
             byte[] Buffer = new byte[128];
             int Count = 0;
             while (true)
             {
    
                 //检查连接//发送心跳包
                     Connect();
                     //解析接收到的数据
                     try
                     {
                         if (MyTcpClient .Available >0)
                         {
                             Buffer = new byte[128];
                             Count = MyNetworkStream.Read(Buffer, 0, Buffer.Length);
                             if (Count > 0)
                             {
                                 BarCodeStr = ExplanationByte(Buffer);
                             }
                         }
                     }
                     catch (Exception err)
                     {
                         string a = err.Message;
                     }
    
                     Thread.Sleep(100);
                 
             }
         }
    
         /// <summary>
         /// 解析来自条码扫描头的字符串
         /// </summary>
         /// <param name="Buffer"></param>
         /// <returns></returns>
       private   string ExplanationByte(byte[] Buffer)
         {
             if (Buffer .Length >0)
             {
                 string Value = System.Text.ASCIIEncoding.ASCII.GetString(Buffer, 0, Buffer.Length);
                 Value = Value.Replace("
    ", "");
                 Value = Value.Replace("
    ", "");
                 Value = Value.Replace(" ", "");
                 return Value;
             }
             else
             {
                 return string.Empty;
             }
             
         }
             
        }
    }

    程序写好了,可以用网络调试助手来调试收发情况!

  • 相关阅读:
    洛谷 U141580 简化罗波切问题
    洛谷 U141578 维修电路
    洛谷 U140760 狭义公因子
    CF75C Modified GCD
    算法题-求解斐波那切数列的第N个数是几?
    算法题-求N的阶乘
    JAVA8新特性
    nginx启动脚本,手动编辑
    javah生成带有包名的头文件
    Matlab图像处理(03)-基本概念
  • 原文地址:https://www.cnblogs.com/qq458978/p/5860413.html
Copyright © 2011-2022 走看看