zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C# Udp测试工具开发

c#开发 UDP 测试工具
2023-09-11 14:16:29 时间

1、软件UI测试界面

2、创建Config.ini配置文件

[系统参数]
本地UDP地址=192.168.124.4
本地UDP端口=7788
目标控制器IP地址=192.168.124.255
目标控制器端口号=6666

3、创建全局变量

        IniFile ini = new IniFile("./Config.ini");
        bool isUdpConnected = false;

        static Socket client;
        Thread threadRecv;
        string recv;
        string LocalIp = "192.168.1.25";
        int LocalPort = 1000;
        string TargetIp = "192.168.1.255";
        int TargetPort = 10000;

4、添加UdpForm_Load事件程序

        private void UdpForm_Load(object sender, EventArgs e)
        {
            try
            {

                LocalIp = ini.IniReadValue("系统参数", "本地UDP地址");
                LocalPort = int.Parse(ini.IniReadValue("系统参数", "本地UDP端口"));
                TargetIp = ini.IniReadValue("系统参数", "目标控制器IP地址");
                TargetPort = int.Parse(ini.IniReadValue("系统参数", "目标控制器端口号"));

                txtLocalIp.Text = LocalIp;
                txtLocalPort.Text = LocalPort.ToString();
                txtTargetIp.Text = TargetIp;
                txtTargetPort.Text = TargetPort.ToString();

                client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                client.Bind(new IPEndPoint(IPAddress.Parse(LocalIp), LocalPort));
                Thread.Sleep(50);
                txtUdpState.Text = "本地Udp创建成功";
                isUdpConnected = true;
            }
            catch
            {
                txtUdpState.Text = "本地Udp创建失败";
                isUdpConnected = false;
            }
            

            threadRecv = new Thread(ReciveMsg);
            threadRecv.Start();
 
            timer1.Start();
        }

5、创建线程ReciveMsg()处理函数

        /// <summary>
        /// 接收发送给本机ip对应端口号的数据报
        /// </summary>
        void ReciveMsg()
        {
            while (true)
            {
                if(isUdpConnected)
                {
                    

                    EndPoint point = new IPEndPoint(IPAddress.Any, 0);//用来保存发送方的ip和端口号
                    byte[] buffer = new byte[1024];
                    int length = client.ReceiveFrom(buffer, ref point);//接收数据报
                    if(length>0)
                    {
                        //显示对方ip地址和端口号
                        string fromIp = point.ToString();
                        recv += fromIp;
                        recv += "\r\n";

                        //显示发送时间
                        string sTime = DateTime.Now.ToString();
                        recv += sTime;
                        recv += ":";
                    }

                    recv += Encoding.UTF8.GetString(buffer, 0, length);
                    recv += "\r\n";

                    /*
                    EndPoint point = new IPEndPoint(IPAddress.Any, 0);//用来保存发送方的ip和端口号
                    byte[] buffer = new byte[1024];
                    int length = client.ReceiveFrom(buffer, ref point);//接收数据报
                    recv += Encoding.UTF8.GetString(buffer, 0, length);                    
                    recv += "\r\n";
                    //txtReciv.Text += recv;
                    */ 
                }
                
            }
        }

6、添加btnSend_Click按钮事件程序

        private void btnSend_Click(object sender, EventArgs e)
        {
            try
            {
                UdpSend(txtSend.Text, TargetIp, TargetPort);
            }
            catch
            {

            }
        }

7、封装UdpSend方法

        /// <summary>
        /// 本地Udp对外单播
        /// </summary>
        /// <param name="strSend"></param>
        /// <param name="ip"></param>
        /// <param name="port"></param>
        private void UdpSend(string strSend, string ip, int port)
        {
            try
            {
                if (isUdpConnected)
                {
                    string targetIp = ip;
                    //int targetPort = int.Parse(port);
                    EndPoint point = new IPEndPoint(IPAddress.Parse(targetIp), port);
                    string msg = strSend;
                    client.SendTo(Encoding.UTF8.GetBytes(msg), point);
                }
            }
            catch { }

        }

8、关闭程序,关闭创建的所有线程

        private void UdpForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            System.Environment.Exit(0);         //强制关闭所有线程            
        }

下载连接

https://download.csdn.net/download/panjinliang066333/85567657