首先要搞清楚多播IP地址有哪些

D类IP地址就是多播地址,范围是224.0.0.0 ~ 239.255.255.255

其中又划分为以下类别

D类地址的划分

类别 地址范围 描述
局部链接地址(本地网络控制块) 224.0.0.0~224.0.0.255 用于局域网,路由器不转发属于此范围的IP包
预留多播地址 224.0.1.0~238.255.255.255 用于全球范围或网络协议
管理权限地址 239.0.0.0~239.255.255.255 组织内部使用,用于限制多播范围

服务器端:

     private UdpClient udpSend;

         private void button1_Click(object sender, EventArgs e)
{
//判断是否为空
if(this.richTextBox1.Text == "")
{
MessageBox.Show("Please input the text");
return;
} //初始始UdpClient
udpSend = new UdpClient();
//允许发送和接收广播数据报
udpSend.EnableBroadcast = true; //必须使用组播地址范围内的地址
IPEndPoint iep = new IPEndPoint(IPAddress.Parse("224.0.0.10"), ); byte[] bytes = Encoding.UTF8.GetBytes(this.richTextBox1.Text); //发送组播信息
try
{
udpSend.Send(bytes, bytes.Length, iep);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
return;
} this.richTextBox1.Text = "";
this.richTextBox1.Focus();
}

接收多播消息客户端

 private void button2_Click(object sender, EventArgs e)
{
ReceiveMessage(this.richTextBox1);
}

用于接收多播消息的ReceiveMessage(RichTextBox textBox)方法

  private void ReceiveMessage(RichTextBox textBox)
{
byte[] bytes = null; //在本机指定的端口进行接收
udpReceive = new UdpClient(); //将套接字加入组播组
udpReceive.JoinMulticastGroup(IPAddress.Parse("224.0.0.10"), ); //接收从远程主机发送过来的消息
IPEndPoint iep = new IPEndPoint(IPAddress.Loopback, );//这里是本地测试,所以写成环回地址
//如果是远程主机,则写成 IPEndPoint iep = new IPEndPoint(IPAddress.Any,0); while(true)
{
try
{
bytes = udpReceive.Receive(ref iep);
textBox.Text = Encoding.UTF8.GetString(bytes);
MessageBox.Show(Encoding.UTF8.GetString(bytes));
}
catch(Exception e)
{
MessageBox.Show(e.Message);
return;
}
}
}

        上面接收的代码逻辑有点问题,因为接收完一次消息,还会一直等着接收下一次消息,会造成阻塞。来个if判断下就行了

        设置端口号时的0是指自动分配

上面加入多播组时用到了TTL

TTL的极限约定

初始TTL 约定 初始TTL 约定
0 多播数据报被限制在同一个主机 64 多播数据报被限制在同一个地区
1 多播数据报被限制在同一个子网 128 多播数据报被限制在同一个本土
32 多播数据报被限制在同一个站点 255 没有范围限制

在窗体关闭事件中加上以下代码用来关闭UDP连接

 private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if(udpReceive != null)
 udpReceive.Close();
}

多播程序设计(基于UDP协议)的更多相关文章

  1. 基于UDP协议模拟的一个TCP协议传输系统

    TCP协议以可靠性出名,这其中包括三次握手建立连接,流控制和拥塞控制等技术.详细介绍如下: 1. TCP协议将需要发送的数据分割成数据块.数据块大小是通过MSS(maximum segment siz ...

  2. 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

    Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...

  3. JAVA基础知识之网络编程——-基于UDP协议的通信例子

    UDP是一种不可靠的协议,它在通信两端各建立一个socket,这两个socket不会建立持久的通信连接,只会单方面向对方发送数据,不检查发送结果. java中基于UDP协议的通信使用DatagramS ...

  4. 基于UDP协议的控制台聊天

    这几天学了java的网络编程弄出一个基于UDP协议的聊天工具 功能 添加并且备注好友(输入对方的ip) 删除好友 查看好友列表 用java写的控制台程序导出可执行程序后不能双击打开 还需要些一个脚本文 ...

  5. 基于UDP协议的网络编程

    UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket,但这两个Socket之间并没有虚拟链路,这两个Socket只是发送.接收数据报的对象. Java使用DatagramSock ...

  6. 网络编程应用:基于UDP协议【实现文件下载】--练习

    要求: 基于UDP协议实现文件下载 发送方–请求–接收方发送文件–发送方接收文件 代码: 发送方: package Homework1; import java.io.File; import jav ...

  7. 基于UDP协议的socket编程

    UDP协议特点: 1.无连接.服务端与客户端传输数据之前不需要进行连接,且没有超时重发等机制,只是把数据通过网络发送出去.也正是因为此特点,所以基于UDP协议的socket的客户端在启动之前不需要先启 ...

  8. 基于UDP协议的控制台聊天程序(c++版)

    本博客由Rcchio原创,转载请告知作者 ------------------------------------------------------------------------------- ...

  9. Learning-Python【30】:基于UDP协议通信的套接字

    UDP协议没有粘包问题,但是缓冲区大小要足够装数据包大小,建议不要超过 512 服务端: # 服务端 import socket server = socket.socket(socket.AF_IN ...

  10. python 全栈开发,Day34(基于UDP协议的socket)

    昨日内容回顾 网络的基础概念arp协议 :通过ip地址找到mac地址五层模型 : 应用层 传输层 网络层 数据链路层 物理层tcp协议 : 可靠的 面向连接 全双工 三次握手 四次挥手udp协议 : ...

随机推荐

  1. BatsingJSLib 2.3、Ajax上传多个文件

    //2.3Ajax上传单个或多个文件 //<input type="file" multiple="multiple"/> //参数:文件的表单JD ...

  2. .Net分布式异常报警系统-客户端及服务端API

    客户端 客户端的作用就是捕获未处理异常, 发送异常到服务端. 关于捕获未处理异常的方法参考 http://www.cnblogs.com/youring2/archive/2012/04/25/246 ...

  3. android之远程启动服务

    启动远程服务和隐式启动Activity一样 实现一个服务 为了演示方便,该服务是一个空服务 package xidian.dy.com.chujia; import android.app.Servi ...

  4. python学习笔记整理——元组tuple

    Python 文档学习笔记2 数据结构--元组和序列 元组 元组在输出时总是有括号的 元组输入时可能没有括号 元组是不可变的 通过分拆(参阅本节后面的内容)或索引访问(如果是namedtuples,甚 ...

  5. 【JavaEE企业应用实战学习记录】struts国际化

    <%-- Created by IntelliJ IDEA. User: Administrator Date: 2016/10/6 Time: 16:26 To change this tem ...

  6. 1415-2 计科&计高 软件工程博客&Github地址汇总-修正版

    序号 标识 博客 代码 1 1121袁颖 joanyy joanyy 2 1122崔琪 chitty ChittyCui 3 1123吕志浩 lucy123 715lvzhihao 4 1124张静 ...

  7. Windows平台下安装Hadoop

    今天参照这个网址(http://www.cnblogs.com/kinglau/archive/2013/08/20/3270160.html)安装了下,前面七步没有问题. 到第八步出问题了,后来看了 ...

  8. MyBatis学习--延迟加载

    简介 在resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能.例如:我们查询订单并 ...

  9. 89c51中断入口地址表

    中断源   中断入口地址 外部中断0 0003H 定时器/计数器T0 000BH 外部中断1 0013H 定时器/计数器T1 001BH 串行口中断   0023H

  10. iOS开发小技巧--iOS8之后的cell自动计算高度

    cell高度自动计算步骤: