C# UDP实现远程主机与本地主机两台设备间广播通信

UDP广播通信特点:

1.数据传输不用建立连接,所以不可靠(符合udp协议的特点)
2.数据的发送是面向整个子网的,任何一台在子网内的计算机都可以接收到相同的数据;
3.广播用于udp和原始IP,不能用于TCP

广播地址:

广播地址是专门用于同时向网络中所有工作站进行发送的一个地址。在使用TCP/IP 协议的网络中,主机号为全1的IP地址为广播地址。例如,对于 :192.168.199.0(掩码:255.255.255.0)网段,其广播地址为192.168.199.255 (255 即为2进制的11111111 ),当发出一个目的地址为192.168.199.255的分组时,它将被分发给该网段上的所有计算机。

本地广播: 地址就是255.255.255.255,它不经路由转发,发送本地网络下的所有主机,只能在局域网内转发,主要是不用知道目标主机的掩码与网络地址,本地转发同本地网络下的所有主机。

直接广播: 计算方法通过主机的掩码与网络地址计算出来。掩码最后为0的位为主机位。掩码与网络地址相与,然后主机位全变为1,就是直接广播地址。这样改网络地址下的所有主机都能接收到广播。

两者的区别就是,本地广播在不知道目标主机的网络地址下,如果目标主机是在本地网络,可以发送本地广播,本地网络下的所有主机都能接收广播。直接广播是目标主机的网络地址知道,那该网络地址网段下的所有主机都能收到广播,直接广播更精确范围更小些。

以下为本地广播示例:

发送端,发送的地址,255.255.255.255:Port,即,IPAddress.Broadcast:Port

       private void button1_Click(object sender, EventArgs e)
        {
            
            Thread sendThread = new Thread(new ThreadStart(SendThread));
            sendThread.IsBackground = true;
            sendThread.Start();
       
        }

        void SendThread()
        {

            //定义udp客户端绑定本地网络地址及端口
            UdpClient UDPsend = new UdpClient(new IPEndPoint(“192.168.1.10”, 8080))
            IPEndPoint endpoint = new IPEndPoint(IPAddress.Broadcast, 8080);
            //其实 IPAddress.Broadcast 就是 255.255.255.255
            byte[] buf = Encoding.Default.GetBytes("This is UDP broadcast");

            while (true)
            {
                UDPsend.Send(buf, buf.Length, endpoint);
                richTextBox1.Invoke(new Action(() => {
                    this.richTextBox1.AppendText("This is UDP broadcast"+ "\r\n");
                }));

                Thread.Sleep(1000);
            }

        }


接收端,接收的地址,0.0.0.0:Port,即,IPAddress.Any:Port       

private void button2_Click(object sender, EventArgs e)
        {

            Thread receThread = new Thread(new ThreadStart(RecvThread));
            receThread.IsBackground = true;
            receThread.Start();
        }
        void RecvThread()
        {      
            //定义udp接受端,绑定本地网络地址及端口   
            UdpClient UDPrece = new UdpClient(new IPEndPoint("192.168.11.11", 8080));
            IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, 0);
            while (true)
            {
                byte[] buf = UDPrece.Receive(ref endpoint);
                string msg = Encoding.Default.GetString(buf);
                richTextBox1.Invoke(new Action(() => {
                    this.richTextBox2.AppendText(msg + "\r\n");
                }));
            }

        }

  • 25
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值