自己使用的udp类

这是一个C#实现的UDP通信类,包含发送和接收数据的方法。通过`udpRecStart`启动多线程接收数据,`udpDataSend`发送数据,并提供了IP地址与数字地址之间的转换功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;


namespace MonitorTerminal.udp
{
    public class udp
    {
        /// 用于UDP发送的网络服务类
        private UdpClient udpclient = new UdpClient();


        ///获取本地的IP地址                                     
        private string GetAddressIP()
        {
            string AddressIP = string.Empty;
            foreach (IPAddress _IPAddress in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
            {
                if (_IPAddress.AddressFamily.ToString() == "InterNetwork")
                {
                    AddressIP = _IPAddress.ToString();
                    return AddressIP;
                }
            }
            return AddressIP;
        }

        const uint IOC_IN = 0x80000000;
        static int IOC_VENDOR = 0x18000000;
        int SIO_UDP_CONNRESET = (int)(IOC_IN | IOC_VENDOR | 12);

       
        //开启多线程
        public void udpRecStart(string IPstr,int port)
        {
            IPAddress localIP = IPAddress.Parse(IPstr);
            IPEndPoint localIPEndPoint = new IPEndPoint(localIP, port);
            udpclient = new UdpClient(localIPEndPoint);

            udpclient.Client.IOControl((int)SIO_UDP_CONNRESET, new byte[] { Convert.ToByte(false) }, null);
            Thread threadReceive = new Thread(ReceiveMessages);
            threadReceive.IsBackground = true;
            threadReceive.Start();
        }


        //udp接收
        private void ReceiveMessages()
        {
            IPEndPoint remoteIPEndPoint = new IPEndPoint(IPAddress.Any, 0);
            while (true)
            {
                try
                {
                    byte[] receiveBytes = udpclient.Receive(ref remoteIPEndPoint);
                    //dealUdpRecive();         //接收数据处理函数
                }
                catch
                {
                    break;
                }
            }
        }
        //udp数据发送
        public void udpDataSend(byte[] data, int len, string ip,int port)
        {
            udpclient.Send(data, len, ip, port);
        }


        //IP转换成数字地址
        public uint IPToInt(string ipAddress)
        {
            string disjunctiveStr = ".,: ";
            char[] delimiter = disjunctiveStr.ToCharArray();
            string[] startIP = null;
            for (int i = 1; i <= 5; i++)
            {
                startIP = ipAddress.Split(delimiter, i);
            }
            string a1 = startIP[0].ToString();
            string a2 = startIP[1].ToString();
            string a3 = startIP[2].ToString();
            string a4 = startIP[3].ToString();
            uint U1 = uint.Parse(a1);
            uint U2 = uint.Parse(a2);
            uint U3 = uint.Parse(a3);
            uint U4 = uint.Parse(a4);
            uint U = U1 << 24;
            U += U2 << 16;
            U += U3 << 8;
            U += U4;
            return U;
        }
        //数字地址转换成IP
        public string IntToIP(uint ipAddress)
        {
            long ui1 = ipAddress & 0xFF000000;
            ui1 = ui1 >> 24;
            long ui2 = ipAddress & 0x00FF0000;
            ui2 = ui2 >> 16;
            long ui3 = ipAddress & 0x0000FF00;
            ui3 = ui3 >> 8;
            long ui4 = ipAddress & 0x000000FF;
            string IPstr = "";
            IPstr = System.Convert.ToString(ui1) + "."
            + System.Convert.ToString(ui2) + "."
            + System.Convert.ToString(ui3)
            + "." + System.Convert.ToString(ui4);
            return IPstr;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值