(整理)C#实现UDP广播
(一) IP地址解析
IP地址的类型:XXX.XXX.XXX.XXX
A类: 1.0.0.1--126.255.255.254
- 最高位是0;
- 1个字节的网络地址和3个地址的主机地址
- 测试地址:127.XXX.XXX.XXX
B类: 128.0.0.1--191.255.255.254
- 最高位是10
- 私有地址:172.16.0.0-172.31.255.254
- 保留地址:169.254.X.X(自动的DHCP服务器)
- 广播地址:191.255.255.255
C类: 192.0.0.1--192.168.255.255
- 最高位110
- 私有地址:192.168.0.1--192.168.255.255
D类: 224.0.0.1--239.255.255.255,最高位为1110
E类: 240.0.0.1--255.255.255.254 ,最高位为1111
受限广播:255.255.255.255,用来将一个分组以广播方式发送给本网络中的所有主机,路由器则阻挡该分组通过,将其广播功能限制在本网内部
IPv6: 用8组16进制数表示,例如:2001:0db8:85a3:08d3:1319:8a2e:0370:7344是一个合法的IPv6地址。
如果四个数字都是0,可以被省略。例如:
2001:0db8:85a3:0000:1319:8a2e:0370:7344
等价于
2001:0db8:85a3::1319:8a2e:0370:7344
遵从这些规则,如果因为省略而出现了两个以上的冒号的话,可以压缩为一个,但这种零压缩在地址中只能出现一次。因此:
- 2001:0DB8:0000:0000:0000:0000:1428:57ab
- 2001:0DB8:0000:0000:0000::1428:57ab
- 2001:0DB8:0:0:0:1428:57ab
- 2001:0DB8:0::0:1428:57ab
- 2001:0DB8::1428:57ab
都是合法的地址,并且他们是等价的。
IPv4转IPv6:
IPv4,135.75.43.52(87.4B.2B.34,十六进制为0x874B2B34)
IPv6,0000:0000:0000:0000:0000:0000:874B:2B34 或者::874B:2B34或者::135.75.43.52
(二)代码
来源:http://blog.csdn.net/adream307/article/details/8231222
using System;
.using System.Collections.Generic;
.using System.Linq;
.using System.Text;
.using System.Net;
.using System.Net.Sockets;
.using System.Threading;
.
.namespace Test
.{
. class Program
. {
. static void Main(string[] args)
. {
. UdpClient client = new UdpClient(new IPEndPoint(IPAddress.Any, ));
. IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse("255.255.255.255"), );
. byte[] buf = Encoding.Default.GetBytes("Hello from UDP broadcast");
. Thread t = new Thread(new ThreadStart(RecvThread));
. t.IsBackground = true;
. t.Start();
. while (true)
. {
. client.Send(buf, buf.Length, endpoint);
. Thread.Sleep();
. }
. }
.
. static void RecvThread()
. {
. UdpClient client = new UdpClient(new IPEndPoint(IPAddress.Any, ));
. IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, );
. while (true)
. {
. byte[] buf = client.Receive(ref endpoint);
. string msg = Encoding.Default.GetString(buf);
. Console.WriteLine(msg);
. }
. }
. }
.}
实际测试中,255.255.255.255是受限的广播(它不被路由发送,但会被送到相同物理网络段上的所有主机),容易出现问题,建议改成直接广播地址,类似“192.168.1.255”(网络广播会被路由,并会发送到专门网络上的每台主机)。
其它参考文章:
http://baike.baidu.com/link?url=k-7RY6a-dnW931iLF5-zU6EKVi2utSwpud7E-xl90jYjXbyTMd7GL035CkD2lmPnSZoknPOUMdNIRl8ijNnxkK
http://baike.baidu.com/link?url=CD1x3z6_4jOLTxsKxFQcBLMFH6U79nky5Cf3PAYS7zrPI0GqhYYOBMxvmbmnEZ94PaKeCDf_0cBDcFzaWmNUG_
http://wenku.baidu.com/link?url=C4FV9Xr9t4tuP_EMvBzSkXhC4QaKjb0gGxGXlhknOlE8eIF0YpdLl2sM2180J2rUEV5sKpcjutDoZ3C4wQ9V2sqZzR_KZj1wQ1LMNn73WTe
https://zh.wikipedia.org/wiki/IP地址
(整理)C#实现UDP广播的更多相关文章
- NetworkComms V3 之发送UDP广播消息
NetworkComms网络通信框架序言 NetworkComms通信框架,是一款来自英国的c#语言编写的通信框架,历时6年研发,成熟稳定,性能可靠. NetworkComms v3目前只支持基本的U ...
- 通过UDP广播实现Android局域网Peer Discovering
本文是对个人笔记中内容的整理,部分代码及图片来自互联网,由于不好找到原始出处,所以未加注明. 如有痛感,联系删除. 本文将介绍以下知识点: TCP与UDP的区别: 单播.多播.广播: Java中实现U ...
- 利用Docker技术实现UDP广播效果(网络编程python版)
docker的安装见官方文档 我使用的系统为Ubuntu16.04 Ubuntu系统安装docker文档地址:https://docs.docker.com/engine/installation/l ...
- 给Hi3518e的Uboot添加UDP广播收发功能
基于个人兴趣,决定实现一个和方案公司提供的uboot收发广播的功能.记录笔记如下. SDK版本:Hi3518E_V100R001C01SPC081 1. 由于我手头的板子的Phy是RMII模式,因此先 ...
- Android杂谈--HTC等手机接收不到UDP广播报文的解决方案
最近遇到个问题,在android手机上发送UDP报文的时候,HTC等机型(测试用HTC new one)接收不到广播报文,而其他的samsung, huawei, xiaomi, nexus等等均没有 ...
- [C# 网络编程系列]专题七:UDP编程补充——UDP广播程序的实现
转自:http://www.cnblogs.com/zhili/archive/2012/09/03/2666974.html 上次因为时间的关系,所以把上一个专题遗留下的一个问题在本专题中和大家分享 ...
- c# socket udp广播
一.广播消息 由于Tcp是有连接的,所以不能用来发送广播消息.发送广播消息,必须用到Udp,Udp可以不用建立连接而发送消息.广播消息的目的IP地址是一种特殊IP地址,称为广播地址.广播地址由IP地址 ...
- 【Netty】UDP广播事件
一.前言 前面学习了WebSocket协议,并且通过示例讲解了WebSocket的具体使用,接着学习如何使用无连接的UDP来广播事件. 二.UDP广播事件 2.1 UDP基础 面向连接的TCP协议管理 ...
- UDP广播-缓冲区过小
上次介绍到了关于客户端实时刷新摄像头所识别的图片的一些方法,采用了了UDP广播的技术做处理.理论上是没有问题的,将客户端运行在不同电脑上也能很好的看到效果,运行日志也没看出啥问题,结果今天翻看日志的时 ...
随机推荐
- C#Winform中treeView控件使用总结
1.如何展开结点时改变图标(注意:不是选中时) 要在目录中使用图标首先要加入一个控件ImageList(命名为imageList1),然后可以按图片的index或名称引用图片. 然后需要在TreeVi ...
- mysql 获取一个表中缺失的最小编号
select count(*),t1.`name` from test_id t1INNER JOIN test_id t2on t1.id >= t2.idgroup by t1.id,t1. ...
- JAVA包命名规范
学习Java的童鞋们都知道,Java的包.类.接口.方法.变量.常量:JavaEE的三层模型等都有一套约定俗成的命名规则. 我学习每种语言都会关注相应的命名规则,一则体现自己比较专业:二来方便后检查, ...
- android 各国语言对应的缩写
android资源文件夹的写法规则: 语言缩写-国家地区缩写 语言缩写 藏语:bo_CN en 英文 en_US 英文 (美国) ar 阿拉伯文 ar_AE 阿拉伯文 (阿拉伯联合酋长国) ar_BH ...
- linux创建git远程仓库
root用户 ============================ // 创建用户 >adduser newuser // 修改用户的密码 >passwd newuser // 设置权 ...
- 构建VIM下的C++编程环境
1.VIM配置 Vim强大的配置与功能,其来源基本上就两个地方:Vim插件以及Vim配置文件. Vim本身的系统配置文件夹是在/usr/share/vim/和/etc/vim/两个文件夹下.一般情况下 ...
- erlang实现ssh
借鉴自http://blog.csdn.net/the__one/article/details/6567443和http://blog.yufeng.info/archives/1509 单命令启动 ...
- c#无限级分类
data: [ { text: '节点1', icon: myaccount, children: [ { text: '节点1.1', icon: archives }, { text: '节点1. ...
- [svn] linux命令——svn分支创建、合并
一.创建分支 1,创建一个分支 svn copy svn://xx.com/repo/trunk svn://xx.com/repo/branches/TRY-something -m 'make b ...
- php没有开启Memcache扩展类时
模拟PHP Memcache 类.当服务器没有开启Memcache扩展的时候.可以采用本类使用方法class_exists('Memcache') or include './Memcache.cla ...