多播程序设计(基于UDP协议)
首先要搞清楚多播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协议)的更多相关文章
- 基于UDP协议模拟的一个TCP协议传输系统
TCP协议以可靠性出名,这其中包括三次握手建立连接,流控制和拥塞控制等技术.详细介绍如下: 1. TCP协议将需要发送的数据分割成数据块.数据块大小是通过MSS(maximum segment siz ...
- 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程
Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...
- JAVA基础知识之网络编程——-基于UDP协议的通信例子
UDP是一种不可靠的协议,它在通信两端各建立一个socket,这两个socket不会建立持久的通信连接,只会单方面向对方发送数据,不检查发送结果. java中基于UDP协议的通信使用DatagramS ...
- 基于UDP协议的控制台聊天
这几天学了java的网络编程弄出一个基于UDP协议的聊天工具 功能 添加并且备注好友(输入对方的ip) 删除好友 查看好友列表 用java写的控制台程序导出可执行程序后不能双击打开 还需要些一个脚本文 ...
- 基于UDP协议的网络编程
UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket,但这两个Socket之间并没有虚拟链路,这两个Socket只是发送.接收数据报的对象. Java使用DatagramSock ...
- 网络编程应用:基于UDP协议【实现文件下载】--练习
要求: 基于UDP协议实现文件下载 发送方–请求–接收方发送文件–发送方接收文件 代码: 发送方: package Homework1; import java.io.File; import jav ...
- 基于UDP协议的socket编程
UDP协议特点: 1.无连接.服务端与客户端传输数据之前不需要进行连接,且没有超时重发等机制,只是把数据通过网络发送出去.也正是因为此特点,所以基于UDP协议的socket的客户端在启动之前不需要先启 ...
- 基于UDP协议的控制台聊天程序(c++版)
本博客由Rcchio原创,转载请告知作者 ------------------------------------------------------------------------------- ...
- Learning-Python【30】:基于UDP协议通信的套接字
UDP协议没有粘包问题,但是缓冲区大小要足够装数据包大小,建议不要超过 512 服务端: # 服务端 import socket server = socket.socket(socket.AF_IN ...
- python 全栈开发,Day34(基于UDP协议的socket)
昨日内容回顾 网络的基础概念arp协议 :通过ip地址找到mac地址五层模型 : 应用层 传输层 网络层 数据链路层 物理层tcp协议 : 可靠的 面向连接 全双工 三次握手 四次挥手udp协议 : ...
随机推荐
- [CF#290 Div.1 C]Fox And Dinner(最大流)
题目:http://codeforces.com/contest/512/problem/C 题目大意:给你若干个数,让你分成k组,每组围成一个圆,使得相邻两个数和均为素数,且每组人数应>=3个 ...
- [BZOJ 1260][CQOI2007]染色(DP)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1260 分析: f[i][j]表示i~j刷成s[i]~s[j]这个样子需要的最小次数 则 ...
- XML中的DOCTYPE属性
一.先来两个小例子 内部dtd将standalone设为真. <?xml version="1.0" standalone="yes"?> < ...
- 关于HTML+CSS设置图片居中的方法
有的时候我们会遇到这样一个问题,就是当我们按下F12进行使用firebug调试的时候,我们发现图像没有居中,页面底下有横向的滑动条出现,图片没能够居中,默认状态下只是紧靠在页面最左侧,而我们对图像缩小 ...
- C#中的Where和Lambda表达式
1 2 3 4 5 6 7 8 9 10 11 List<string> listString = new List<string>(); listString.Add(&qu ...
- ActiveMQ_Topic队列(三)
一.本文章包含的内容 1.列举了ActiveMQ中通过Topic方式发送.消费队列的代码(监听者有两个,分别是topicMessageListener1.topicMessageListener2) ...
- JavaScript写一个小乌龟推箱子游戏
推箱子游戏是老游戏了, 网上有各种各样的版本, 说下推箱子游戏的简单实现,以及我找到的一些参考视频和实例: 推箱子游戏的在线DEMO : 打开 如下是效果图: 这个拖箱子游戏做了移动端的适配, 我使用 ...
- 100722C
My birthday is coming up and traditionally I'm serving pie. Not just one pie, no, I have a number N ...
- spring-从普通java类取得注入spring Ioc容器的对象的方案
1.启动服务时通过spring容器的监听器(继承ContextLoaderListener 监听器的方法) public class ListenerSpringContext extends Con ...
- 网络爬虫讲解(附java实现的实例)
本文转载http://blog.csdn.net/luojinping/article/details/6870898 转载过来主要是防止想百度文库一样突然停止运作,导致很多文库丢失而无法找寻 网络蜘 ...