C#UDP組播發送接收


UDP組播發送與接收

背景:服務端獲取未知客戶端IP

誤區:

服務端往組播地址發送消息,然后以接收組播的方式接收組播成員的回復無法接到。通過Wireshark抓包可以抓到來自目標客戶端的包。發現目標客戶端采用UDP單播方式發送 因而服務端接收不到此包。

解決方法:

目標客戶端接收到來自服務端的組播信息之后同樣以組播的方式回復信息。信息包含客戶端IP和其他校驗信息


using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;

namespace Client 
{
    class Program
    {
        static void Main(string[] args)
        {
            UdpClient client = new UdpClient();
            client.JoinMulticastGroup(IPAddress.Parse("239.255.255.250"));
            IPEndPoint multicast = new IPEndPoint(IPAddress.Parse("239.255.255.250"), 37020);
            string mess = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Probe><Uuid>0414E4C1-1B08-408F-9442-BC2B6834D29D</Uuid><Types>inquiry</Types></Probe>";
            byte[] buf = Encoding.Default.GetBytes(mess);
            Thread t = new Thread(new ThreadStart(RecvThread));
            t.IsBackground = true;
            t.Start();
            while (true)
           {
                client.Send(buf, buf.Length, multicast);
               Thread.Sleep(1000);
           }
        }

        static void RecvThread()
        {
            UdpClient client = new UdpClient(37020);
            client.JoinMulticastGroup(IPAddress.Parse("239.255.255.250"));
            IPEndPoint multicast = new IPEndPoint(IPAddress.Parse("239.255.255.250"),0);
            while (true)
            {
                byte[] buf = client.Receive(ref multicast);
                string msg = Encoding.Default.GetString(buf);
                Console.WriteLine(msg);
                Console.WriteLine(multicast);
           }
       }
   }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM