您的位置:首页 > 编程语言 > C#

ASTM协议中文传输的解决

2016-06-15 16:16 2356 查看
       在一个仪器项目中,需要支持传输中文信息的ASTM协议,按照ASTM E1381-95 和 ASTM E1394-97 的定义是不支持中文传输的,后在底层的TCP传输解析中采用了unicode编码方式,TCP的解析封装成库,同时给LIS系统方调用,解决了问题。

  /// <summary>

    /// 定义TCP 通信方式

    /// 支持 Unicode 传输方式

    /// </summary>

    public class LinkTcpUnicode : CommunicationUnit

    {

        private readonly Encoding _encoding;

        private readonly TcpClient _tcpClient;

        public Encoding tEncoding { get; set; }

        /// <summary>

        /// 传输使用的是UNICODE编码,保证中文字符的传输。

        /// </summary>

        /// <param name="tcpClient"></param>

        public LinkTcpUnicode(TcpClient tcpClient)

        {

            _encoding = new System.Text.UnicodeEncoding();

            _tcpClient = tcpClient;

        }

        public void Dispose()

        {

        }

        ///支持中文方式的读方法

        public int Read(char[] buffer, int offset, int count)

        {

            var bytes = new byte[buffer.Length * 2];

            int read = _tcpClient.GetStream().Read(bytes, offset, bytes.Length);

            _encoding.GetChars(bytes).CopyTo(buffer, 0);

            return read / 2;

        }

        public void SetTimeout(int ms)

        {

            _tcpClient.ReceiveTimeout = ms;

            _tcpClient.SendTimeout = ms;

        }

        public void Write(string text)

        {

            byte[] bytes = _encoding.GetBytes(t
a555
ext);

            NetworkStream stream = _tcpClient.GetStream();

            stream.Write(bytes, 0, bytes.Length);

            stream.Flush();

        }

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ASTM C# LIS