SuperSocket.ClientEngine使用

  1. 最近这2天在做winform程序,用到json,supersocket.client   SerialPort

json使用的是Newtonsoft.Json.dll ,SuperSocket.ClientEngine使用的是SuperSocket.ClientEngine.dll和SuperSocket.ProtoBase.dll  SerialPort  是winform自带的

  1. Json

string josnString = File.ReadAllText("./json/news.json", Encoding.Default);

listRtuBean = JsonConvert.DeserializeObject<List<RtuBean>>(josnString);

listRtuBean = listRtuBean.OrderBy(m => m.id).ToList();  //用于排序

  1. SuperSocket.ClientEngine

https://github.com/kerryjiang/SuperSocket.ClientEngine

需要引入

https://github.com/kerryjiang/SuperSocket.ProtoBase

SuperSocket.ClientEngine最新的是2017版的,我的是2015下的是老的

而且打开的是.csproj,按照visual studio 2015要求保存为了SuperSocket.ClientEngine.Net45.sln

然后引入的SuperSocket.ProtoBase,引入的时候是到src下SuperSocket.ProtoBase.Net45.csproj这个

具体使用,我的是需要传递byte[]的按理说我按照这个要求能够增加一个新类在SuperSocket.ProtoBase中指定传递byte,弄了2天没成,虽然有SuperSocket.base(server端)的代码,后来使用了他中的AsyncTcpSession client = null;

具体用法

private void initSocket()

        {

            //AsyncTcpSession client = new AsyncTcpSession(new IPEndPoint(IPAddress.Parse(UartInfo.ipAddress), UartInfo.port));

            client = new AsyncTcpSession();

            // 连接断开事件

            client.Closed += client_Closed;

            // 收到服务器数据事件

            client.DataReceived += client_DataReceived;

            // 连接到服务器事件

            client.Connected += client_Connected;

            // 发生错误的处理

            client.Error += client_Error;

            client.Connect(new IPEndPoint(IPAddress.Parse(UartInfo.ipAddress), UartInfo.port));    

            

        }

 

private void client_Connected(object sender, EventArgs e)

        {

            Console.WriteLine("连接成功");

        }

 

        private void client_DataReceived(object sender, DataEventArgs e)

        {

            byte[] buffer = new byte[e.Length];

            Array.Copy(e.Data, buffer, buffer.Length);

            DelgateShowModbusTcpResponse delgateShowModbusTcpResponseByte = new DelgateShowModbusTcpResponse(parseNetData);

            Invoke(delgateShowModbusTcpResponseByte, buffer);   

        }

 

        

        private void client_Closed(object sender, EventArgs e)

        {

            client.Close();

            Console.WriteLine("连接断开");

            //MessageBox.Show("网络连接断开");

        }

 

        private void client_Error(object sender, SuperSocket.ClientEngine.ErrorEventArgs e)

        {

            MessageBox.Show(e.Exception.Message);

        }

 

        private void parseNetData(byte[] data)

        {

            

        }

但是这个有个问题,就是初始化的时候,如果网络不通,也不报错误,而是在发送的时候报错误

if (client != null && client.IsConnected) {

                client.Close();                

            }

  1. SerialPort

private void loadCOMControl()

        {

            try

            {

                serialPort.PortName = UartInfo.PortName;

                serialPort.BaudRate = UartInfo.BaudRate;

 

                if (UartInfo.Parity.Equals("None")) {

                    serialPort.Parity = Parity.None;

                }

                else if (UartInfo.Parity.Equals("Odd"))

                {

                    serialPort.Parity = Parity.Odd;

                }

                else if (UartInfo.Parity.Equals("Even"))

                {

                    serialPort.Parity = Parity.Even;

                }

 

                serialPort.DataBits = UartInfo.DataBits;

                if (UartInfo.StopBits.Equals("1")) {

                    serialPort.StopBits = StopBits.One;

                }

                else if (UartInfo.StopBits.Equals("2"))

                {

                    serialPort.StopBits = StopBits.Two;

                }

                else if (UartInfo.StopBits.Equals("1.5"))

                {

                    serialPort.StopBits = StopBits.OnePointFive;

                }

                

                serialPort.ReadBufferSize = 1024;

                serialPort.WriteTimeout = 3000;

                serialPort.ReadTimeout = 3000;

                serialPort.DataReceived += serialDataReceivedEvent;

                bool flag = serialPort.IsOpen;

                serialPort.Open();

 

            }

            catch (Exception e) {

                MessageBox.Show("打开端口失败,请确认改端口是否已经被使用 "+e.Message);                

            }

        }

 

 void serialDataReceivedEvent(object sender, SerialDataReceivedEventArgs e)

        {

            SerialPort port = (SerialPort)sender;

            byte[] bytebuffer = new byte[port.BytesToRead];//serialport读取串口数据

            port.Read(bytebuffer, 0, bytebuffer.Length);//串口读取到数据

 

            try

            {

                lock (this)

                {

                    if (bytebuffer.Length > 0)

                    {

                        addByteToByteList(bytebuffer);

                        writeConsole(bytebuffer);

                        if (operateFlag == 1 || operateFlag == 4)

                        {

                            //读数据返回

                            if (checkReadRecvData())

                            {

                                byte[] feData = ModbusRtu.getModbusReadResponse(portBufferByteList.ToArray());

                                delByteToByteList(feData);

                                showReadResponse(feData);

                            }

                        }

                        else if (operateFlag == 2 || operateFlag == 3 || operateFlag == 5 || operateFlag == 6)

                        {

                            //写数据返回

                            if (checkWriteRecvData())

                            {

                                byte[] feData = ModbusRtu.getModbusWriteResponse(portBufferByteList.ToArray());

                                delByteToByteList(feData);

                                showWriteResponse(feData);

                            }

                        }

                    }

                }

            }

            catch (Exception ex)

            {

                MessageBox.Show("接收串口数据失败" + ex.Message);

            }

        }

 

private void showReadResponse(byte[] feData)

        {

            DelgateShowReadResponse delgateShowReadResponseByte = new DelgateShowReadResponse(showReadResponseByte);

            Invoke(delgateShowReadResponseByte, feData);

        }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值