欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#套接字(Socket)通信之UDP組播詳解

 更新時間:2023年05月16日 09:42:48   作者:微小冷  
單播 Unicast是指客戶端與服務器之間的點到點連接,組播和單播的差別是,必須得有一個“組”的概念,然后才能進行組播,本文就來和大家講講UDP組播的實現(xiàn)吧

組播的概念

UDP信息傳遞的方式分三類,分別是

  • 單播 Unicast:客戶端與服務器之間的點到點連接
  • 多播MultiCast:又稱組播,是“一對一組”的通訊模式,加入同一個組的主機可以接受到此組內的所有數(shù)據(jù)。
  • 廣播 BroadCast:主機之間“一對所有”的通訊模式,廣播者可以向網絡中所有主機發(fā)送信息。廣播禁止在Internet寬帶網上傳輸。

其中單播比較簡單,在C#中可直接通過UdpClient點對點收發(fā)。

組播和單播的差別是,必須得有一個“組”的概念,然后才能進行組播,在C#中,通過client.JoinMulticastGroup來實現(xiàn)。

另外,組播對IP地址的范圍有一定的要求:

起始IP截至IP適用范圍
224.0.0.1224.0.0.255預留地址,最好不要亂用
224.0.1.0224.0.1.255公用地址,可用于互聯(lián)網
224.0.2.0238.255.255.255用戶可用,全網范圍
239.0.0.0239.255.255.255本地

其中224.0.0.0也是預留的組播地址,但保留不做分配。

簡單示例

下面再頂級語句中做一個簡單的示例

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

static void Main()
{
    UdpClient client = new UdpClient(5566);
    client.JoinMulticastGroup(IPAddress.Parse("235.5.6.8"));
    
    IPEndPoint multicast = new IPEndPoint(IPAddress.Parse("234.5.6.7"), 7788);
    byte[] buf = Encoding.Default.GetBytes("Hello from multicast");
    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(7788);
    client.JoinMulticastGroup(IPAddress.Parse("234.5.6.7"));
    IPEndPoint multicast = new IPEndPoint(IPAddress.Parse("235.5.6.8"), 5566);
    while (true)
    {
        byte[] buf = client.Receive(ref multicast);
        string msg = Encoding.Default.GetString(buf);
        Console.WriteLine(msg);
    }
}

Main();

函數(shù)RecvThread中,定義了一個端口號為7778的UDP客戶端,并通過JoinMulticastGroup添加了234.5.6.7這個IP地址。在死循環(huán)中,讓client不斷接收來自multicast的信息,其中multicast是地址為235.5.6.8,端口為5566的終端。

Main函數(shù)則創(chuàng)建了端口為5566的客戶端,然后不斷地向234.5.6.7:7788發(fā)送消息。

這個示例程序運行之后,命令行中會不斷地輸出

Hello from multicast

但這個示例其實并沒有體現(xiàn)出“組播”的特點,原因在于上面的代碼只用了一個地址,雖然用到了組播的模式,但實際操作上來看,還是一對一的。

組播的優(yōu)勢

下面稍微修改一下代碼,首先在RecvThread中新增一個IP

    client.JoinMulticastGroup(IPAddress.Parse("234.5.6.9"));

然后在Main中新增一組發(fā)給新IP的信息,類似下面這樣

static void Main()
{
    UdpClient client = new UdpClient(5566);
    client.JoinMulticastGroup(IPAddress.Parse("235.5.6.8"));
    IPEndPoint multi1 = new IPEndPoint(IPAddress.Parse("234.5.6.7"), 7788);
    IPEndPoint multi2 = new IPEndPoint(IPAddress.Parse("234.5.6.9"), 7788);
    byte[] buf1 = Encoding.Default.GetBytes("Hello multi1");
    byte[] buf2 = Encoding.Default.GetBytes("Hello multi2");
    Thread t = new Thread(new ThreadStart(RecvThread));
    t.IsBackground = true;
    t.Start();
    while (true)
    {
        client.Send(buf1, buf1.Length, multi1);
        client.Send(buf2, buf2.Length, multi2);
        Thread.Sleep(1000);
    }
}

從而命令行輸出就會變成

Hello multi1
Hello multi2

也就是說,發(fā)給兩個不同IP地址的信息,都被client接收到了。

到此這篇關于C#套接字(Socket)通信之UDP組播詳解的文章就介紹到這了,更多相關C# UDP組播內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論