C# 仪器对接之网口传输(一)

情景:

仪器为客户端,需要编写服务器用来接收仪器传输的数据 ,并解析出所需要的内容

示例:

仪器配置 服务端 ip:192.168.0.25   端口: 5051

服务端则编写如下:

声明变量

 private int port;//监听端口号
        private static byte[] result = new byte[1024];
        private static Socket server;//服务器Socket
        private IPAddress ip;//Ip地址
        private static Socket Client;//客户端Socket
        private Thread receiveThread;
        private Thread dataThread;

        // 全局变量
        int bytes = 0;
        string str = string.Empty;                    // 接收到的数据
        byte[] DataByte = null;
        int buff = 100000000;                          

start()

 public void Start()
        {
            try
            {
                // 格式化IP Port
                IPAddress localIP = IPAddress.Parse(192.168.0.25);
                IPEndPoint ipe = new IPEndPoint(localIP, 5051);
                // 创建 TCP连接的Socket
                server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
               // server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
                server.Bind(ipe); //配置服务器IP与端口  
                server.Listen(20);
                // 启动数据接收线程
                 dataThread = new Thread(new ThreadStart(ListenClientConnect));
                //将窗体线程设置为与后台同步,随着主线程结束而结束  
                dataThread.IsBackground = true;
                dataThread.Start();
            }
            catch (Exception e)
            {
                this.Stop();
            }
        }

stop()

 public void Stop()
        {
            try
            {
                if (Client != null)
                {
                    if (Client.Connected)
                    {
                        Client.Shutdown(SocketShutdown.Both);
                    }

                    Client.Close();
                }
               
                if (server != null)
                {
                    if (server.Connected)
                    {
                        server.Shutdown(SocketShutdown.Both);
                    }
                    server.Close();
                }

            }
            catch (Exception ex)
            {
                return;
            }
        }

ListtnClientConnect()

 private void ListenClientConnect()
        {
            try
            {
                while (true)
                {
                    Client = server.Accept();
                    receiveThread = new Thread(GetData);
                    receiveThread.Start(Client);
                }
            }
            catch(Exception ex)
            {
            }
        }

Getdata()

 private void GetData(object clientSocket)
        {
            Client = (Socket)clientSocket;
            while (true)
            {
                try
                {
                    DataByte = new byte[buff];
                    bytes = Client.Receive(DataByte, DataByte.Length, 0);
                    if (bytes> 0)
                    {
                       //获取仪器传输过来的数据
                        str = Encoding.Default.GetString(DataByte, 0, bytes);

                        //回传数据给仪器(如果需要回传信息则需要仪器厂商提供回传格式)
                        Client.Send("回传仪器的内容");

                        //解析仪器传过来的数据
                    
                        this.str = string.Empty;
                    }
                }
                catch (Exception ex) // 主动关闭Server receve函数会抛出异常
                {
                    break;
                }
            }
         }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tiegenZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值