C#广播程序

转载 2013年12月05日 20:55:52

C#广播程序

http://www.cnblogs.com/tuyile006/archive/2006/09/14/504477.html

前言

在网络编程中,通过广播和多播可以实现发送端发送一个数据包,有多个接收端接收的情况。

 

广播

由于Tcp是有连接的,所以不能用来发送广播消息。发送广播消息,必须用到UdpUdp可以不用建立连接而发送消息。广播消息的目的IP地址是一种特殊IP地址,称为广播地址。广播地址由IP地址网络前缀加上全1主机后缀组成,如:192.168.1.255192.169.1.0这个网络的广播地址;130.168.255.255130.168.0.0这个网络的广播地址。向全部为1IP地址(255.255.255.255)发送消息的话,那么理论上全世界所有的联网的计算机都能收得到了。但实际上不是这样的,一般路由器上设置抛弃这样的包,只在本地网内广播,所以效果和向本地网的广播地址发送消息是一样的。

 

C#中发送广播消息的过程如下,注意要调用SetSockOption函数,不然要抛出异常:

   Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,
                ProtocolType.Udp);
   IPEndPoint iep1 = new IPEndPoint(IPAddress.Broadcast, 9050);//255.255.255.255
   IPEndPoint iep2 = new IPEndPoint(IPAddress.Parse("192.168.1.255"), 9050);
   string hostname = Dns.GetHostName();
   byte[] data = Encoding.ASCII.GetBytes(hostname);
   sock.SetSocketOption(SocketOptionLevel.Socket,
              SocketOptionName.Broadcast, 1);
   sock.SendTo(data, iep1);
   sock.SendTo(data, iep2);
   sock.Close();

C#中接收广播消息的过程如下,没有什么特别的:

   Socket sock = new Socket(AddressFamily.InterNetwork,
           SocketType.Dgram, ProtocolType.Udp);
   IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9050);
   sock.Bind(iep);
   EndPoint ep = (EndPoint)iep;
   Console.WriteLine("Ready to receive");
   byte[] data = new byte[1024];
   int recv = sock.ReceiveFrom(data, ref ep);
   string stringData = Encoding.ASCII.GetString(data, 0, recv);
   Console.WriteLine("received: {0} from: {1}",
              stringData, ep.ToString());
   data = new byte[1024];
   recv = sock.ReceiveFrom(data, ref ep);
   stringData = Encoding.ASCII.GetString(data, 0, recv);
   Console.WriteLine("received: {0} from: {1}",
              stringData, ep.ToString());
   sock.Close();
Attentions:
1 广播可以由客户程序来通知子网内的服务程序,自己的位置。

2 发送广播消息时指定的端口也是有作用的,接收端的Udp Socket如果Bind到此接口的话,就能够接收到消息。(如果不Bind的话,就能接收所有端口的消息??)

3 接收端接到的包中显示的远端IP地址是发送端的地址。就是说广播地址不会显示到一个包的源IP地址位置(LoopBack地址不会显示到包的目的IP地址位置)

4 可以用线程不停地发送和接收广播消息,确认两端的位置和证明自己的存在

C#实现局域网UDP广播--

接收端:            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, Protocol...
  • u011555996
  • u011555996
  • 2016年11月21日 14:49
  • 832

C#实现 UDP简单广播

[csharp] view plain copy print? 代码    Code highlighting produced by Actipro CodeHighli...
  • u011555996
  • u011555996
  • 2016年11月21日 13:53
  • 921

C#源代码—委托的演示,利用多路广播机制优化

CaculateOfNumber cn = new CaculateOfNumber(); //创建一个对象 cn.handler = new Caculate(cn.Produc...
  • heyuchang666
  • heyuchang666
  • 2016年01月13日 12:10
  • 627

Unity3d C# 广播消息 事件代理与委托

广播与消息 函数原型: public void ReceiveBroadcastMessage (string methodName, object value); public v...
  • he_wen_jian
  • he_wen_jian
  • 2014年10月30日 19:46
  • 4484

c#局域网屏幕广播二三事(1)-屏幕抓取

最近项目中需要,使用C#做了一个简版的教学软件,过程中碰到过一些坑,也终于爬出来,现在随着项目的收尾,想要通过博客的方式来梳理和记录一下相关东西。 如下为对屏幕抓取封装的Capture,其中包含了...
  • peilinok
  • peilinok
  • 2017年04月01日 10:43
  • 802

c#局域网屏幕广播二三事(2)-拆包组包

拆包组包提炼于一位大拿的文章,这里提供链接: c#中关于udp实现可靠地传输(数据包的分组发送) 仅仅使用了大拿所设计的包的拆分、组装与序列化部分。 在此工程中,将拆包组包模块单独作为了一个li...
  • peilinok
  • peilinok
  • 2017年04月14日 09:52
  • 494

Socket编程实现广播和多播

本文转自http://wangyali90516.blog.163.com/blog/static/1172051012011793131861/,转载至此仅为方便学习参考 广播 广播是指...
  • zhouwei1221q
  • zhouwei1221q
  • 2015年05月02日 15:29
  • 1420

android 跨应用程序广播发送接受

广播作为android的四大组件之一,适用的地方还是很多,多用来特定条件情况下的通知。例如,开机,闹铃,电池电量过低等等。但还可以自定义广播,用来两个应用程序的通知。 曾经写的开机自启动的博客(通过...
  • qq_16064871
  • qq_16064871
  • 2016年05月18日 18:09
  • 8604

TCP/IP网络编程 学习笔记_15 --多播与广播

前言:想想这么一种情况,网络电台可能需要同时向成千上万的用户传输相同的数据,如果用我们以前讲过的传输形式,每个用户都传输一次,这样肯定是不合理的。因此,就引入了多播技术来解决这个问题,它可以同时向大量...
  • u010223072
  • u010223072
  • 2015年09月08日 10:58
  • 2197

多网卡的广播

1)多网卡广播时,每个网卡都绑定一次,广播一次
  • ljh081231
  • ljh081231
  • 2014年04月07日 20:45
  • 2008
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#广播程序
举报原因:
原因补充:

(最多只允许输入30个字)