接上一讲,程序启动就要发送广播消息,如何发送广播消息,这一讲将给大家好好讲讲网络广播的知识,以及C#如何实现广播. 
第一部分.什么是广播地址,以及广播地址怎么计算 
1.1 广播地址是什么? 
主机号全为1,用于向一个网络内的所有主机发送信息的IP地址.如:受限的广播地址是255.255.255.255。该地址用于主机配置过程中IP数据报的目的地址,此时,主机可能还不知道它所在网络的网络掩码,甚至连它的IP地址也不知道。在任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报仅出现在本地网络中。 
PS:一般无特殊要求广播地址选择255.255.255.255即可. 
1.2 计算方法 
首先 计算网络地址 = IP地址  逻辑与(&)  子网掩码 
先把IP,子网掩码转为2进制,然后进行逻辑与运算,得出网络地址 
例: 
IP 192.168.1.3  子网掩码 255.255.0.0 
IP转二进制 11000000.10100100.00000001.00000011 
子网掩码    11111111.11111111.00000000.00000000 
与运算后    11000000.10100100.00000000.00000000 
192.168.0.0这就是网络地址,其中子网掩码全1对应为网络号,全0对应的是主机号,即192.168.0.0对应的网络号为192.168,主机号为0.0.将网络地址主机部分全取反后得到的地址便是广播地址: 
广播地址    11000000.10100100.11111111.11111111 
换成10进制则为192.168.0.0

第二部分.C#利用UDP协议如何实现广播 
2.1  如何实现UDP广播,直接举例说明: 
button1_Click时使用了UDP广播向外发送了数据 
RecData()在后台接受UDP协议的消息

//UDP通过广播实现群发功能 
namespace BroadcastExample 

    public partial class Form1 : Form 
    { 
        delegate void AppendStringCallback(string text); 
        AppendStringCallback appendstringcallback; 
        //使用的接收端口 51008 
        /// <summary> 
        /// 端口号 
        /// </summary> 
        private int port = 51008; 
        /// <summary> 
        /// udp连接对象 
        /// </summary> 
        private UdpClient udpclient; 
        public Form1() 
        { 
            InitializeComponent(); 
            appendstringcallback = new AppendStringCallback(AppendString); 
        } 
        /// <summary> 
        /// 委托对象的处理过程 
        /// </summary> 
        /// <param name="text"> </param> 
        private void AppendString(string text) 
        { 
            if (richtextBox2.InvokeRequired == true) 
            { 
                this.Invoke(appendstringcallback, text); 
            } 
            else 
            { 
                richtextBox2.AppendText(text + "\r\n"); 
            } 
        } 
        /// <summary> 
        /// 在后台运行的接收线程 
        /// </summary> 
        private void RecData() 
        { 
            //本机指定端口接收 
            udpclient = new UdpClient(port); 
            IPEndPoint remote = null; 
            //接收从远程主机发送过来的信息 
            while (true) 
            { 
                try 
                { 
                    //关闭udpclient时此句会产生异常 
                    byte[] bytes = udpclient.Receive(ref remote); 
                    string str = Encoding.UTF8.GetString(bytes, 0, bytes.Length); 
                    AppendString(string.Format("来自{0}:{1}", remote, str)); 
                } 
                catch 
                { 
                    //退出循环,结束线程 
                    break; 
                } 
            } 
        } 
        private void Form1_Load(object sender, EventArgs e) 
        { 
            //创建一个线程接收接收远程主机发来的信息 
            Thread mythread = new Thread(new ThreadStart(RecData)); 
            //将线程设为后台运行 
            mythread.IsBackground = true; 
            mythread.Start(); 
        } 
        private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
        { 
            udpclient.Close(); 
        } 
        private void button1_Click(object sender, EventArgs e) 
        { 
            UdpClient myUdpclient = new UdpClient(); 
            
            try 
            { 
                IPEndPoint iep = new IPEndPoint(IPAddress.Broadcast, port); 
                byte[] bytes = System.Text.Encoding.UTF8.GetBytes(textBox1.Text); 
                myUdpclient.Send(bytes, bytes.Length, iep); 
                textBox1.Clear(); 
                myUdpclient.Close(); 
                textBox1.Focus(); 
            } 
            catch (Exception err) 
            { 
                MessageBox.Show(err.Message, "发送失败"); 
            } 
            finally 
            { 
                myUdpclient.Close(); 
            } 
        } 
    } 
}

C#局域网聊天工具_UDP广播的更多相关文章

  1. 用Socket做一个局域网聊天工具(转)

    原文:http://www.cnblogs.com/technology/archive/2010/08/15/1799858.html 程序设计成为简单的服务端和客户端之间的通信, 但通过一些方法可 ...

  2. TCPIP协议编程:基于UDP协议的局域网聊天工具的研发

    任务目标 聊天器采用客户端/服务器(C/S)模式: 客户端利用UDP与服务器相连,客户端与客户端之间通过UDP相互通信: 服务器端具有服务器端口设置维护客户端个人信息,记录客户端状态,分配账号等: 客 ...

  3. nc 局域网聊天+文件传输(netcat)

    nc 局域网聊天+文件传输 nc的全程是netcat,这个工具非常好用. 有时候我们需要在局域网内传送一些文本消息或者文件的时候,通常的做法是安装一些局域网通讯软件,然后来做.其实不必要这样,使用nc ...

  4. Python3 实现简易局域网视频聊天工具

    Python3 实现简易局域网视频聊天工具   1.环境 操作系统为 Ubuntu 16.04 python 3.5opencv-python 3.4.1.15numpy 1.14.5PyAudio ...

  5. Java之简单的聊天工具

    今天整理资料的时候,找出自己几年前刚学Java时做过的一个简易的聊天工具,有服务器也有客户端,能发送文字消息和文件,但是用户上线并未存入数据库,而只是简单的缓存在服务器的一个数组中,所以,只要服务器一 ...

  6. 【Python】iichats —— 命令行下的局域网聊天程序

    转载请声明出处:http://www.cnblogs.com/kevince/p/3941728.html   ——By Kevince ii系列工具第三弹,命令行下的局域网聊天程序 原理: 程序启动 ...

  7. RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增企业通(内部简易聊天工具)

    RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本 新增企业通(内部简易聊天工具) RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用 ...

  8. 用c#写的一个局域网聊天客户端 类似小飞鸽

    用c#写的一个局域网聊天客户端 类似小飞鸽 摘自: http://www.cnblogs.com/yyl8781697/archive/2012/12/07/csharp-socket-udp.htm ...

  9. 局域网聊天软件(winsocket)

    LANChat工作整理 2013/8/22 程序实现功能: 局域网聊天软件,启动即可找到在线设备,并能够进行简单的文字聊天. 其实下面这个框图已经说明了程序的绝大部分功能原理. 核心类的程序框图 我觉 ...

随机推荐

  1. Cobertura 代码覆盖率测试

    Cobertura 是一种开源工具,它通过检测基本的代码,并观察在测试包运行时执行了哪些代码和没有执行哪些代码,来测量测试覆盖率.除了找出未测试到的代码并发现 bug 外,Cobertura 还可以通 ...

  2. window.showModalDialog两次加载问题清除缓存方法

    问题: window.showModalDialog两次加载问题:你第一次打开窗口后,第二次浏览器没有从服务器端取数据,而直接找到了你已经下载的文件,也就是不再走后台的Action方法(即使数据已经更 ...

  3. js添加事件通用方法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. javascript模块化编程(AMD规范的加载器)

    关于AMD规范可以参考阮一峰的这篇文章Javascript模块化编程(二):AMD规范 简单来说,AMD规范就是异步方式加载模块的一种方式,避免因为模块加载过慢而导致浏览器“假死”. 先贴一个学习地址 ...

  5. Httpservlet cannot be resolved to a type的原因与解决方法

    刚开始学习Servlet,在Eclipse中新建了一个Servlet,不过页面上报错: Httpservlet cannot be resolved to a type,显然是Eclipse找不到相应 ...

  6. android 各国语言对应的缩写

    android资源文件夹的写法规则: 语言缩写-国家地区缩写 语言缩写 藏语:bo_CN en 英文 en_US 英文 (美国) ar 阿拉伯文 ar_AE 阿拉伯文 (阿拉伯联合酋长国) ar_BH ...

  7. mybatis insert前获取要插入的值

    <insert id="insertRequestItem" parameterType="requestItemModel"> <selec ...

  8. FIR系统的递归与非递归实现

    首先,因为FIR的脉冲响应是有限长,所以总是可以非递归实现的: 其次,也可以用递归系统来实现它. 以滑动平均做例子,最直观的想法就是,每次来一个新的值,丢掉最老的,加上最新的: y[n]=y[n-1] ...

  9. thinkphp在为图片添加png水印不足的处理

    thinkphp在为图片加水印的时候.如果水印图片是png图片,透明度处理很不理想,与是做以下处理 在Image.class.php中新增 static function imagecopymerge ...

  10. Linux进程内存分析pmap命令(转)

    名称:       pmap - report memory map of a process(查看进程的内存映像信息)用法       pmap [ -x | -d ] [ -q ] pids... ...