C# udp通信测试助手-点对点-网络断开检测

1、界面和功能如下,实现功能

(1)100毫秒接收一次,超过1秒钟没有接收到目标信息,则视为连接断开

(2)接收的Soecket目标地址、端口号显示

(3)1秒钟自动发送

(4)本机地址和端口号、目标地址和端口号,从配置文件中读取。

2、代码

复制代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace UdpTest
{
    public partial class MaiForm : Form
    {
        public MaiForm()
        {
            InitializeComponent();
        }
        //
        IniFile ini = new IniFile("./Config.ini");
        //
        bool isRecvIpShow = false;
        bool isContinueSend = false;        //是否连续发送
        bool isAutoNewLine = false;         //是否自动换行
        // 创建UdpClient实例
        Socket udpClient;
        Thread t;
        Thread t2;
        string udpRecv;

        string target_IpPort;
        long heartFlag = 0;
        long nRecvLengthSum = 0;
       

        private void MaiForm_Load(object sender, EventArgs e)
        {
            //char ch = '1';
            //string str = "";
            //str = ch.ToString();

            //string str = "1,2,3";
            //char ch1 = str[0];
            //char ch2 = str[2];
            //char ch3 = str[4];

           //long a = 6553611111111111111;

            try
            {
                //
                txtLocalIp.Text = ini.IniReadValue("系统参数", "本机IP地址");
                txtLocalPort.Text = ini.IniReadValue("系统参数", "本机端口号");
                txtSendIp.Text = ini.IniReadValue("系统参数", "目标IP地址");
                txtSendPort.Text = ini.IniReadValue("系统参数", "目标端口号");
                //
                udpClient = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                udpClient.Bind(new IPEndPoint(IPAddress.Parse(txtLocalIp.Text), int.Parse(txtLocalPort.Text)));

                t = new Thread(sendMsg);
                t.Start();
                t2 = new Thread(ReciveMsg);
                t2.Start();

                timer1.Start();
                target_IpPort = txtSendIp.Text + ":" + txtSendPort.Text;
                txtLocalUdpState.Text = "Udp创建成功";
            }
            catch 
            {
                txtLocalUdpState.Text = "Udp创建失败";
            }
        }

        /// <summary>
        /// 向特定ip的主机的端口发送数据报
        /// </summary>
        void sendMsg()
        {
            EndPoint point = new IPEndPoint(IPAddress.Parse(txtSendIp.Text), int.Parse(txtSendPort.Text));
            while (true)
            {
                if(isContinueSend)
                {
                    string msg = txtSend.Text;
                    udpClient.SendTo(Encoding.Default.GetBytes(msg), point);
                    Thread.Sleep(1000);
                }                
            }
        }
        /// <summary>
        /// 接收发送给本机ip对应端口号的数据报
        /// </summary>
        void ReciveMsg()
        {
            while (true)
            {
                try
                {
                    EndPoint point = new IPEndPoint(IPAddress.Any, 0);//用来保存发送方的ip和端口号
                    byte[] buffer = new byte[1024];
                    int length = udpClient.ReceiveFrom(buffer, ref point);//接收数据报
                    string strRecvTemp = Encoding.UTF8.GetString(buffer, 0, length);
                    if (length > 0)
                    {
                        nRecvLengthSum += length;
                        //是否显示接收的ip地址和端口号
                        if (isRecvIpShow)
                        {
                            //是否自动换行
                            if (!isAutoNewLine)
                            {
                                udpRecv += point.ToString() + ": " + strRecvTemp;
                            }
                            else
                            {
                                udpRecv += point.ToString() + ": " + strRecvTemp + "\r\n";
                            }
                        }
                        else
                        {
                            if (!isAutoNewLine)
                            {
                                udpRecv +=  strRecvTemp;
                            }
                            else
                            {
                                udpRecv +=  strRecvTemp + "\r\n";
                            }
                        }
                        
                        

                        string str = point.ToString();
                        if (target_IpPort == str)
                        {
                            heartFlag = 0;
                        }
                    }
                    Thread.Sleep(100);
                }
                catch { }
            }
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            EndPoint point = new IPEndPoint(IPAddress.Parse(txtSendIp.Text), int.Parse(txtSendPort.Text));
            string msg = txtSend.Text;
            udpClient.SendTo(Encoding.UTF8.GetBytes(msg), point);

        }

        
        private void timer1_Tick(object sender, EventArgs e)
        {
            isAutoNewLine = checkAutoNewLine.Checked;
            isRecvIpShow = check_接收Ip地址和端口号.Checked;
            txtUdpRecv.Text = udpRecv;
            txtRecvLength.Text = nRecvLengthSum.ToString();
            if (heartFlag > 10)
            {
                txtTargetConnectState.Text = "连接断开";
            }
            else
            {
                txtTargetConnectState.Text = "连接成功";
            }
            heartFlag++;
            //if (heartFlag > 65534)
            //{
            //    heartFlag = 100;
            //}
            txtDisConnectTime.Text = (heartFlag / 10).ToString();
            
        }

        private void MaiForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            System.Environment.Exit(0);         //强制关闭所有线程   
            Application.Exit();
        }
        
        private void checkContinueSend_CheckedChanged(object sender, EventArgs e)
        {
            isContinueSend = checkContinueSend.Checked;
            if(isContinueSend)
            {
                btnSend.Enabled = false;
            }
            else
            {
                btnSend.Enabled = true;
            }
        }

        private void btnClear_Click(object sender, EventArgs e)
        {
            txtUdpRecv.Text = "";
            udpRecv = "";
            nRecvLengthSum = 0;
        }


    }
}

3、下载连接

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

相关推荐
照海19Gin24 分钟前
HCIA-Datacom 高阶:VLAN、VLANIF 与静态路由综合实验
网络·智能路由器
Zz_waiting.27 分钟前
网络原理 - 11(HTTP/HTTPS - 2 - 请求)
运维·网络·网络协议·mysql·http·https·抓包
JhonKI2 小时前
【Linux网络】深入解析I/O多路转接 - Select
linux·运维·网络
精神病不行计算机不上班2 小时前
【计网】计算机网络的类别与性能
网络·计算机网络
我学上瘾了2 小时前
链表反转_leedcodeP206
网络·redis·链表
尽兴-3 小时前
TCP vs UDP:核心区别、握手过程与应用场景(附对比图)
java·网络协议·tcp/ip·udp
识途老码3 小时前
什么是单臂路由
运维·服务器·网络·单臂路由
Linux运维老纪4 小时前
Ansible 铸就 Linux 安全之盾(Ansible Builds Linux Security Shield)
linux·服务器·网络·安全·云计算·ansible·运维开发
whoarethenext4 小时前
c网络库libevent的http常用函数的使用(附带源码)
网络·c++·http·libevent
尘世中迷途小码农4 小时前
使用O_DIRECT + 批量写数据到磁盘对丢包率的优化
网络