最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

組播的概念

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

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

其中單播比較簡(jiǎn)單,在C#中可直接通過(guò)UdpClient點(diǎn)對(duì)點(diǎn)收發(fā)。

組播和單播的差別是,必須得有一個(gè)“組”的概念,然后才能進(jìn)行組播,在C#中,通過(guò)client.JoinMulticastGroup來(lái)實(shí)現(xiàn)。

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

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

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

簡(jiǎn)單示例

下面再頂級(jí)語(yǔ)句中做一個(gè)簡(jiǎn)單的示例

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中,定義了一個(gè)端口號(hào)為7778的UDP客戶端,并通過(guò)JoinMulticastGroup添加了234.5.6.7這個(gè)IP地址。在死循環(huán)中,讓client不斷接收來(lái)自multicast的信息,其中multicast是地址為235.5.6.8,端口為5566的終端。

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

這個(gè)示例程序運(yùn)行之后,命令行中會(huì)不斷地輸出

Hello from multicast

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

組播的優(yōu)勢(shì)

下面稍微修改一下代碼,首先在RecvThread中新增一個(gè)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);
    }
}

從而命令行輸出就會(huì)變成

Hello multi1
Hello multi2

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

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

相關(guān)文章

  • C#8.0中新語(yǔ)法“is{}“的介紹及使用小結(jié)

    C#8.0中新語(yǔ)法“is{}“的介紹及使用小結(jié)

    is模式匹配操作符通過(guò)測(cè)試一個(gè)變量是否是一個(gè)對(duì)象,來(lái)判斷其是否不為null值,本文主要介紹了C#8.0中新語(yǔ)法“is{}“的介紹及使用小結(jié),感興趣的可以了解一下
    2023-11-11
  • C#遍歷子目錄的方法

    C#遍歷子目錄的方法

    這篇文章主要介紹了C#遍歷子目錄的方法,涉及C#針對(duì)目錄操作的相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • C#?HttpClient超時(shí)重試機(jī)制詳解

    C#?HttpClient超時(shí)重試機(jī)制詳解

    超時(shí)重試的實(shí)現(xiàn)方式可以使用循環(huán)結(jié)構(gòu),在請(qǐng)求發(fā)起后等待一定時(shí)間,若超時(shí)未收到響應(yīng),則再次發(fā)起請(qǐng)求,循環(huán)次數(shù)可以根據(jù)實(shí)際情況進(jìn)行設(shè)置,一般建議不超過(guò)三次,這篇文章主要介紹了C#?HttpClient超時(shí)重試,需要的朋友可以參考下
    2023-06-06
  • C#多線程學(xué)習(xí)之(三)生產(chǎn)者和消費(fèi)者用法分析

    C#多線程學(xué)習(xí)之(三)生產(chǎn)者和消費(fèi)者用法分析

    這篇文章主要介紹了C#多線程學(xué)習(xí)之生產(chǎn)者和消費(fèi)者用法,實(shí)例分析了C#中線程沖突的原理與資源分配的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • C# PLINQ 內(nèi)存列表查詢優(yōu)化歷程

    C# PLINQ 內(nèi)存列表查詢優(yōu)化歷程

    這篇文章主要介紹了C# PLINQ 內(nèi)存列表查詢優(yōu)化歷程的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • 淺談C#中的Infinity和NaN

    淺談C#中的Infinity和NaN

    下面小編就為大家?guī)?lái)一篇淺談C#中的Infinity和NaN。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • C# double和decimal數(shù)據(jù)類型以截?cái)嗟姆绞奖A糁付ǖ男?shù)位數(shù)

    C# double和decimal數(shù)據(jù)類型以截?cái)嗟姆绞奖A糁付ǖ男?shù)位數(shù)

    從事ASP.NET in C#開(kāi)發(fā)快一年了,今天才知道,C#中保留小數(shù)位數(shù)時(shí)沒(méi)有使用截?cái)嗟姆绞?/div> 2012-05-05
  • unity實(shí)現(xiàn)流光效果

    unity實(shí)現(xiàn)流光效果

    這篇文章主要為大家詳細(xì)介紹了unity實(shí)現(xiàn)流光效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C#中將dateTimePicker初始值設(shè)置為空

    C#中將dateTimePicker初始值設(shè)置為空

    本文主要介紹了C#中將dateTimePicker初始值設(shè)置為空,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • C#瀏覽器提示跨域問(wèn)題解決方案

    C#瀏覽器提示跨域問(wèn)題解決方案

    這篇文章主要介紹了C#瀏覽器提示跨域問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07

最新評(píng)論

阳新县| 锦州市| 光山县| 丰台区| 扎鲁特旗| 佛坪县| 永宁县| 尤溪县| 沾化县| 民乐县| 长治市| 满城县| 基隆市| 宁海县| 双辽市| 朝阳县| 云和县| 元氏县| 仲巴县| 瑞昌市| 南召县| 衡东县| 绥化市| 嵊泗县| 乃东县| 桑植县| 县级市| 白玉县| 通辽市| 隆安县| 陆丰市| 荆州市| 元朗区| 通江县| 曲沃县| 弥勒县| 民县| 麟游县| 永城市| 恭城| 仁寿县|