首先要搞清楚多播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. [CF#290 Div.1 C]Fox And Dinner(最大流)

    题目:http://codeforces.com/contest/512/problem/C 题目大意:给你若干个数,让你分成k组,每组围成一个圆,使得相邻两个数和均为素数,且每组人数应>=3个 ...

  2. [BZOJ 1260][CQOI2007]染色(DP)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1260 分析: f[i][j]表示i~j刷成s[i]~s[j]这个样子需要的最小次数 则 ...

  3. XML中的DOCTYPE属性

    一.先来两个小例子 内部dtd将standalone设为真. <?xml version="1.0" standalone="yes"?> < ...

  4. 关于HTML+CSS设置图片居中的方法

    有的时候我们会遇到这样一个问题,就是当我们按下F12进行使用firebug调试的时候,我们发现图像没有居中,页面底下有横向的滑动条出现,图片没能够居中,默认状态下只是紧靠在页面最左侧,而我们对图像缩小 ...

  5. C#中的Where和Lambda表达式

    1 2 3 4 5 6 7 8 9 10 11 List<string> listString = new List<string>(); listString.Add(&qu ...

  6. ActiveMQ_Topic队列(三)

    一.本文章包含的内容 1.列举了ActiveMQ中通过Topic方式发送.消费队列的代码(监听者有两个,分别是topicMessageListener1.topicMessageListener2) ...

  7. JavaScript写一个小乌龟推箱子游戏

    推箱子游戏是老游戏了, 网上有各种各样的版本, 说下推箱子游戏的简单实现,以及我找到的一些参考视频和实例: 推箱子游戏的在线DEMO : 打开 如下是效果图: 这个拖箱子游戏做了移动端的适配, 我使用 ...

  8. 100722C

    My birthday is coming up and traditionally I'm serving pie. Not just one pie, no, I have a number N ...

  9. spring-从普通java类取得注入spring Ioc容器的对象的方案

    1.启动服务时通过spring容器的监听器(继承ContextLoaderListener 监听器的方法) public class ListenerSpringContext extends Con ...

  10. 网络爬虫讲解(附java实现的实例)

    本文转载http://blog.csdn.net/luojinping/article/details/6870898 转载过来主要是防止想百度文库一样突然停止运作,导致很多文库丢失而无法找寻 网络蜘 ...