• j9首页|官网首页

    润宇软件
    首 页 企业简介 项目案例 软件定制 行业软件 办理方案 企业资讯 办事专区 客服中心
    商业介绍:j9九游会软件公司、软件开辟、软件定制、软件外包
    软件 方案 文章
      润宇软件 >> 新闻资讯  >> 办理方案

    软件公司中C#中的串口,网口和PLC通讯

    公布工夫:2022/8/18  欣赏次数:次  字体【    】
    串口:串口是一个泛称,UART、TTL、RS232、RS485都遵照相似的通讯时序协议,因而都被通称为串口 
    RS232:是电子产业协会(Electronic Industries Association,EIA) 订定的异步传输尺度接口,同时对应着电平尺度和通讯协议(时序),其电平尺度:+3V~+15V对应0,-3V~-15V对应1。rs232 的逻辑电温和TTL 纷歧样但协议一样 
    RS485:RS485是一种串口接口尺度,为了长间隔传输接纳差分方法传输,传输的是差分信号,抗搅扰才能比RS232强许多。两线压差为-(2~6)V表现0,两线压差为+(2~6)V表现1 
    TCP/IP 是互联网相干的各种协议族的总称,好比:TCP,UDP,IP,FTP,HTTP,ICMP,SMTP 等都属于 TCP/IP 族内的协议。像如许把与互联网相干联的协议聚集起来总称为 TCP/IP。也有说法以为,TCP/IP 是指 TCP 和 IP 这两种协议。另有一种说法以为,TCP/IP 是在 IP 协议的通讯历程中,利用到的协议族的统称。

    c# tcp/ip通讯

    using System;
    using System.Collections.Generic;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    using System.Threading;
    using System.Windows.Forms;
    namespace csharpService
    {
        public partial class Service : Form
        {
            public Service()
            {
                InitializeComponent();
                ///多线程编程中,假如子线程必要利用主线程中创立的工具和控件,最幸亏主线程中表现举行反省取消
                ///
                CheckForIllegalCrossThreadCalls = false;
                /// 获取当地IP
                textBox_current_address.Text = IPAddress.Any.ToString();
            }
            /// 创立一个字典,用来存储记载办事器与客户端之间的毗连(线程题目)
            ///
            private Dictionary<string, Socket> clientList = new Dictionary<string, Socket>();
            /// 创立毗连
            private void button_connect_Click(object sender, EventArgs e)
            {
                Thread myServer = new Thread(MySocket);
                //设置这个线程是背景线程
                myServer.IsBackground = true;
                myServer.Start();
            }
            //①:创立一个用于监听毗连的Socket工具;
            //②:用指定的端标语和办事器的Ip创建一个EndPoint工具;
            //③:用Socket工具的Bind()办法绑定EndPoint;
            //④:用Socket工具的Listen()办法开端监听;
            //⑤:吸收到客户真个毗连,用Socket工具的Accept()办法创立一个新的用于和客户端举行通讯的Socket工具;
            //⑥:通讯完毕后肯定记得封闭Socket。
            /// 创立毗连的办法
            private void MySocket()
            {
                //1.创立一个用于监听毗连的Socket工具;
                Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
                //2.用指定的端标语和办事器的Ip创建一个EndPoint工具;
                IPAddress iP = IPAddress.Parse(textBox_current_address.Text);
                IPEndPoint endPoint = new IPEndPoint(iP, int.Parse(textBox_port.Text));
                //3.用Socket工具的Bind()办法绑定EndPoint;
                server.Bind(endPoint);
                //4.用Socket工具的Listen()办法开端监听;
                //统一时候内容许同时参加链接的最大数目
                server.Listen(20);
                listBox_log.Items.Add("办事器曾经乐成开启!");
                //5.吸收到客户真个毗连,用Socket工具的Accept()办法创立一个新的用于和客户端举行通讯的Socket工具;
                while (true)
                {
                    //承受接入的一个客户端
                    Socket connectClient = server.Accept();
                    if (connectClient != null)
                    {
                        string infor = connectClient.RemoteEndPoint.ToString();
                        clientList.Add(infor, connectClient);
                        listBox_log.Items.Add(infor + "参加办事器!");
                        ///办事器将音讯发送至客服端
                        string msg = infor + "已乐成进入到谈天室!";
                        SendMsg(msg);
                        //每有一个客户端接入时,必要有一个线程举行办事
                        Thread threadClient = new Thread(ReciveMsg);//带参的办法可以把通报的参数放到start中
                        threadClient.IsBackground = true;
                        //创立的新的对应的Socket和客户端Socket举行通讯
                        threadClient.Start(connectClient);
                    }
                }
            }
            /// 办事器吸收到客户端发送的音讯
            private void ReciveMsg(object o)
            {
                //Socket connectClient = (Socket)o; //与上面结果一样
                Socket connectClient = o as Socket;//connectClient卖力客户真个通讯
                IPEndPoint endPoint = null;
                while (true)
                {
                    try
                    {
                        ///界说办事器吸收的字节巨细
                        byte[] arrMsg = new byte[1024 * 1024];
                        ///吸收到的信息巨细(所占字节数)
                        int length = connectClient.Receive(arrMsg);

                        if (length > 0)
                        {
                            string recMsg = Encoding.UTF8.GetString(arrMsg, 0, length);
                            //获取客户真个端标语
                            endPoint = connectClient.RemoteEndPoint as IPEndPoint;
                            //办事器表现客户真个端标语和音讯
                            listBox_log.Items.Add(DateTime.Now + "[" + endPoint.Port.ToString() + "]:" + recMsg);
                            //办事器(connectClient)发送吸收到的客户端信息给客户端
                            SendMsg("[" + endPoint.Port.ToString() + "]:" + recMsg);
                        }
                    }
                    catch (Exception)
                    {
                        ///移除添加在字典中的办事器和客户端之间的线程
                        clientList.Remove(endPoint.ToString());
                        connectClient.Dispose();


                    }
                }
            }
            /// 办事器发送音讯,客户端吸收
            private void SendMsg(string str)
            {
                ///遍历出字典中的一切线程
                foreach (var item in clientList)
                {
                    byte[] arrMsg = Encoding.UTF8.GetBytes(str);
                    ///获取键值(办事器),发送音讯
                    item.Value.Send(arrMsg);
                }
            }
        }
    }
    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    using System.Threading;
    using System.Windows.Forms;
    namespace csharp_Client
    {
        public partial class Client : Form
        {
            public Client()
            {
                InitializeComponent();
                ///多线程编程中,假如子线程必要利用主线程中创立的工具和控件,最幸亏主线程中表现举行反省取消
                CheckForIllegalCrossThreadCalls = false;
            }
            /// 创立客户端
            private Socket client;
            private void button_connect_Click(object sender, EventArgs e)
            {
                ///创立客户端
                client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
                ///IP地点
                IPAddress ip = IPAddress.Parse(textBox_address.Text);
                ///端标语
                IPEndPoint endPoint = new IPEndPoint(ip, int.Parse(textBox_port.Text));
                ///创建与办事器的近程毗连
                try
                {
                    client.Connect(endPoint);
                }
                catch(Exception)
                {
                    MessageBox.Show("地点或端口错误!!!!");
                    return;
                }
                ///线程题目
                Thread thread = new Thread(ReciveMsg);
                thread.IsBackground = true;
                thread.Start(client);
            }
            /// 客户端吸收到办事器发送的音讯
            private void ReciveMsg(object o)
            {
                Socket client = o as Socket;
                while (true)
                {
                    try
                    {
                        ///界说客户端吸收到的信息巨细
                        byte[] arrList = new byte[1024 * 1024];
                        ///吸收到的信息巨细(所占字节数)
                        int length = client.Receive(arrList);
                        string msg = DateTime.Now + Encoding.UTF8.GetString(arrList, 0, length);
                        listBox_log.Items.Add(msg);
                    }
                    catch (Exception)
                    {
                        ///封闭客户端
                        client.Close();
                    }
                }
            }
            /// 客户端发送音讯给办事端
            private void button_send_Click(object sender, EventArgs e)
            {
                if (textBox_message.Text != "")
                {
                    SendMsg(textBox_message.Text);
                }
            }
            /// 客户端发送音讯,办事端吸收
            private void SendMsg(string str)
            {
                byte[] arrMsg = Encoding.UTF8.GetBytes(str);
                client.Send(arrMsg);
            }

            private void Client_FormClosed(object sender, FormClosedEventArgs e)
            {
                if(client!=null) client.Close();
            }
        }
    }
      封闭本页
    西部IT网互助同伴 互助同伴
    陕西省 | 榆林 | 延安 | 铜川 | 渭南 | 商洛 | 宝鸡 | 汉中 | 安康 | 咸阳
    网站首页 | 关于j9九游会 | 售后办事 | 项目条约 | 检察留言 | 在线留言 | 客服中心
    © 版权一切:j9九游会润宇软件科技有限公司 
    公司地点:j9九游会市丝路国际创意梦工场4号楼 联系>###nbsp;>### 联系人:李老师
    Copyright ® 2009-2015 RunYusoft.com Inc. All Rights Reserved 
    技能支持:j9九游会润宇软件科技有限公司