(整理)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广播的技术做处理.理论上是没有问题的,将客户端运行在不同电脑上也能很好的看到效果,运行日志也没看出啥问题,结果今天翻看日志的时 ...
随机推荐
- String equals的技巧
把常量放到前面,可以避免null指针问题 System.out.print("".equals(null)); String abc = null; System.out.prin ...
- 【java】serialVersionUID作用
serialVersionUID适用于Java的序列化机制.简单来说,Java的序列化机制是通过判断类的serialVersionUID来验证版本一致性的.在进行反序列化时,JVM会把传来的字节流中的 ...
- 【故障处理】ORA-12162: TNS:net service name is incorrectly specified
本文将给大家阐述一个因未设置系统环境变量ORACLE_SID导致ORA-12162错误的案例.希望大家有所思考. 1.获得有关ORA-12162报错信息的通用表述信息[oracle@asdlabdb0 ...
- [jquery] jQuery jsTree V3.2.1 基础Demo
引入对应的文件: <link rel="stylesheet" href="../dist/themes/default/style.min.css" / ...
- [原]Linux系统管理使用技巧总结
一.磁盘管理 1.查看磁盘空间大小 df可以查看一级文件夹大小.使用比例.档案系统及其挂入点,但对文件却无能为力. du可以查看文件及文件夹的大小.如果不带其他参数(-h表示human-readabl ...
- 从一次异常中浅谈Hibernate的flush机制
摘自http://www.niwozhi.net/demo_c70_i1482.html http://blog.itpub.net/1586/viewspace-829613/ 这是在一次事务提交时 ...
- 06文件与IO
这节主要学习系统调用stat.lstat.fstat. 格式如下: int fstat(int filedes, struct stat *buf); int stat(const char *pat ...
- sql 操作,
SELECT * FROM dbo.tbl_Web_Photos AS pt LEFT JOIN dbo.tbl_Web_Friends AS fd ON pt.user_email=fd.AddEm ...
- SQL Server 中LEN函数的问题
LEN('T ') =1 LEN(' T') =2 在数据库中分解字符串时要注意,例如以'^'分隔'X ^ T ',分解时要注意最后的'T '被分解成'T' 可用如下的代码来进行完整的分解 SET A ...
- CXF发布restful WebService的入门例子(服务器端)
研究了两天CXF对restful的支持. 现在,想实现一个以 http://localhost:9999/roomservice 为入口, http://localhost:9999/roomse ...