C# UDP通讯实例

1、发送方代码

void SendMsg(string toip, int port )
        {
            try
            {
                string message="发送内容";
                UdpClient udpclient = new UdpClient();
                IPEndPoint ipendpoint = new IPEndPoint(IPAddress.Parse(ip), port);              
                   
                byte[] data = Encoding.Default.GetBytes(message);
                udpclient.Send(data, data.Length, ipendpoint);
                udpclient.Close();

            }
            catch (Exception ex)
            {

                MessageBox.Show("UDP发送数据" + ex.ToString());
            }

        }

2、接收方代码

 public UdpService udp;

a>实例化、初始化接收事件

udp = new UdpService(fromip, 60000, "127.0.0.1", 60000);
udp.EvtGetValues+=new UdpService.GetRecevice(udp_EvtGetValues);

b>启动UDP

udp.TurnOn();

c>停止UDP

 udp.TurnOff();

d>接收事件处理
 void udp_EvtGetValues(byte[] ReceviceBuff)
        {
            //string message = Encoding.UTF8.GetString(ReceviceBuff, 0, ReceviceBuff.Length);
           //可接收中文内容
           Encoding ei=Encoding.GetEncoding(936);
            string message = ei.GetString(ReceviceBuff, 0, ReceviceBuff.Length);
            if (message.Length > 0)
            {
              // 处理接收逻辑
                
            }
                
        }

 

3、UdpService代码

 public  class UdpService
    {
        #region 内部变量
       
        string devIP = "127.0.0.1";
        int devPort = 60000;
        UdpClient mySocket;
        string meIP = "127.0.0.1";
        int mePort = 60000;
        IPEndPoint RemotePoint;
        bool isRunning = false;
        bool isOpen = false;
        List<Thread> listThread = new List<Thread>();       
        string icId = "";
        string cardContent = "";
        byte[] cardContentBuf;
        #endregion

        public UdpService(string ServerIP, int ServerPort, string DevIP, int DevPort)
        {
            this.meIP = ServerIP;
            this.mePort = ServerPort;
            this.devIP = DevIP;
            this.devPort = DevPort;           
            
        }

        #region   

        public void TurnOn()
        {
            try
            {
                if (isOpen) return;
                mySocket = new UdpClient(mePort);
                IPEndPoint ipLocalPoint = new IPEndPoint(IPAddress.Parse(meIP), mePort);

                RemotePoint = new IPEndPoint(IPAddress.Any, devPort);

                isRunning = true;
                Thread thread = new Thread(new ThreadStart(this.ReceiveHandle));
                thread.IsBackground = true;
                thread.Start();
                listThread.Add(thread);
                isOpen = true;

            }
            catch (Exception ex)
            {
                isOpen = false;
                throw new Exception(ex.Message);
            }
        }

        public void TurnOff()
        {
            try
            {
                isOpen = false;
                isRunning = false;

                for (int i = 0; i < listThread.Count; i++)
                {
                    try
                    {
                        listThread[i].Abort();
                    }
                    catch (Exception) { }
                }

                if (mySocket != null)
                {
                    mySocket.Close();
                }
            }
            catch (Exception)
            {
            }
        }

        public delegate void GetRecevice(byte[] ReceviceBuff);
        public event GetRecevice EvtGetValues;
        private void ReceiveHandle()
        {
            byte[] sendbuf = new byte[9];
            byte[] sendwritbuf = new byte[200];

            while (isRunning)
            {
                try
                {
                    if (mySocket == null || mySocket.Available < 1)
                    {
                        Thread.Sleep(300);
                        continue;
                    }
                    //接收UDP数据报,引用参数RemotePoint获得源地址  
                    byte[] buf = mySocket.Receive(ref RemotePoint);
                    if (devIP == null || devIP.Length < 1)
                    {
                        devIP = RemotePoint.Address.ToString();
                        devPort = RemotePoint.Port;
                    }
                    if (EvtGetValues != null)
                    {
                        EvtGetValues(buf);
                    }
                }
                catch (Exception)
                {
                }
            }
        }
        #endregion
    }

 

转载于:https://www.cnblogs.com/lzsin/p/10868814.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的C# UDP通讯实例代码,其中包括了UDP Socket套接字的创建、发送和接收数据的过程: ```csharp using System; using System.Net; using System.Net.Sockets; using System.Text; class Program { static void Main(string[] args) { // 创建UDP Socket套接字 UdpClient udpClient = new UdpClient(); // 设置远程IP地址和端口号 IPAddress remoteIPAddress = IPAddress.Parse("127.0.0.1"); int remotePort = 8888; // 待发送的数据 string data = "Hello, UDP!"; // 将数据转换为字节数组 byte[] bytes = Encoding.UTF8.GetBytes(data); try { // 发送数据 udpClient.Send(bytes, bytes.Length, remoteIPAddress, remotePort); Console.WriteLine("Sent: {0}", data); // 接收数据 IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0); byte[] receiveBytes = udpClient.Receive(ref remoteEP); string receiveData = Encoding.UTF8.GetString(receiveBytes); Console.WriteLine("Received: {0}", receiveData); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } finally { // 关闭UDP Socket套接字 udpClient.Close(); } Console.ReadKey(); } } ``` 在上述代码中,我们首先创建了一个UDP Socket套接字,然后设置了远程IP地址和端口号。接着,将待发送的数据转换为字节数组,并使用`Send()`方法将其发送出去。最后,通过`Receive()`方法接收远程主机返回的数据,并将其转换为字符串。注意,在接收数据时要使用`ref`关键字传递`remoteEP`参数,以获取远程主机的IP地址和端口号。 这是一个简单的UDP通讯实例代码,你可以根据实际需求进行调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值