• (整理)C#实现UDP广播


    (一) IP地址解析

    IP地址的类型:XXX.XXX.XXX.XXX
    A类: 1.0.0.1--126.255.255.254

    • 最高位是0;
    • 1个字节的网络地址和3个地址的主机地址
    • 测试地址:127.XXX.XXX.XXX

    B类: 128.0.0.1--191.255.255.254

    • 最高位是10
    • 私有地址:172.16.0.0-172.31.255.254
    • 保留地址:169.254.X.X(自动的DHCP服务器)
    • 广播地址:191.255.255.255

    C类:       192.0.0.1--192.168.255.255

    • 最高位110
    • 私有地址:192.168.0.1--192.168.255.255

    D类:       224.0.0.1--239.255.255.255,最高位为1110


    E类:       240.0.0.1--255.255.255.254 ,最高位为1111

    受限广播:255.255.255.255,用来将一个分组以广播方式发送给本网络中的所有主机,路由器则阻挡该分组通过,将其广播功能限制在本网内部

    IPv6:  用8组16进制数表示,例如:2001:0db8:85a3:08d3:1319:8a2e:0370:7344是一个合法的IPv6地址。

        如果四个数字都是0,可以被省略。例如:

                 2001:0db8:85a3:0000:1319:8a2e:0370:7344

        等价于

                 2001:0db8:85a3::1319:8a2e:0370:7344

        遵从这些规则,如果因为省略而出现了两个以上的冒号的话,可以压缩为一个,但这种零压缩在地址中只能出现一次。因此:

      •   2001:0DB8:0000:0000:0000:0000:1428:57ab
      •   2001:0DB8:0000:0000:0000::1428:57ab
      •   2001:0DB8:0:0:0:1428:57ab
      •   2001:0DB8:0::0:1428:57ab
      •   2001:0DB8::1428:57ab

        都是合法的地址,并且他们是等价的。

    IPv4转IPv6:

                 IPv4,135.75.43.52(87.4B.2B.34,十六进制为0x874B2B34)

          IPv6,0000:0000:0000:0000:0000:0000:874B:2B34 或者::874B:2B34或者::135.75.43.52

    (二)代码

       来源:http://blog.csdn.net/adream307/article/details/8231222

    using System;  
    02.using System.Collections.Generic;  
    03.using System.Linq;  
    04.using System.Text;  
    05.using System.Net;  
    06.using System.Net.Sockets;  
    07.using System.Threading;  
    08.  
    09.namespace Test  
    10.{  
    11.    class Program  
    12.    {  
    13.        static void Main(string[] args)  
    14.        {  
    15.            UdpClient client = new UdpClient(new IPEndPoint(IPAddress.Any, 0));  
    16.            IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse("255.255.255.255"), 7788);  
    17.            byte[] buf = Encoding.Default.GetBytes("Hello from UDP broadcast");  
    18.            Thread t = new Thread(new ThreadStart(RecvThread));  
    19.            t.IsBackground = true;  
    20.            t.Start();  
    21.            while (true)  
    22.            {  
    23.                client.Send(buf, buf.Length, endpoint);  
    24.                Thread.Sleep(1000);  
    25.            }  
    26.        }  
    27.  
    28.        static void RecvThread()  
    29.        {  
    30.            UdpClient client = new UdpClient(new IPEndPoint(IPAddress.Any, 7788));  
    31.            IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, 0);  
    32.            while (true)  
    33.            {  
    34.                byte[] buf = client.Receive(ref endpoint);  
    35.                string msg = Encoding.Default.GetString(buf);  
    36.                Console.WriteLine(msg);  
    37.            }  
    38.        }  
    39.    }  
    40.} 

         实际测试中,255.255.255.255是受限的广播(它不被路由发送,但会被送到相同物理网络段上的所有主机),容易出现问题,建议改成直接广播地址,类似“192.168.1.255”(网络广播会被路由,并会发送到专门网络上的每台主机)。

      其它参考文章:

          http://baike.baidu.com/link?url=k-7RY6a-dnW931iLF5-zU6EKVi2utSwpud7E-xl90jYjXbyTMd7GL035CkD2lmPnSZoknPOUMdNIRl8ijNnxkK

      http://baike.baidu.com/link?url=CD1x3z6_4jOLTxsKxFQcBLMFH6U79nky5Cf3PAYS7zrPI0GqhYYOBMxvmbmnEZ94PaKeCDf_0cBDcFzaWmNUG_

      http://wenku.baidu.com/link?url=C4FV9Xr9t4tuP_EMvBzSkXhC4QaKjb0gGxGXlhknOlE8eIF0YpdLl2sM2180J2rUEV5sKpcjutDoZ3C4wQ9V2sqZzR_KZj1wQ1LMNn73WTe

          https://zh.wikipedia.org/wiki/IP地址

  • 相关阅读:
    大数据量查询优化——数据库设计、SQL语句、JAVA编码
    vue项目全局修改字体
    vue项目使用iframe嵌入另一个vue项目的页面
    vue中解决chrome浏览器自动播放音频 和MP3语音打包到线上
    java的string方法使用
    java使用EasyExcel操作Excel
    vue中,使用 es6的 ` 符号给字符串之间换行
    vue显示后端传递的图片流
    最全vue的vue-amap使用高德地图插件画多边形范围
    vue+elementUI实现 分页表格的单选或者多选、及禁止部分选择
  • 原文地址:https://www.cnblogs.com/hhhh2010/p/5228215.html
Copyright © 2020-2023  润新知