IP多路广播 C# .NET

 
IP 多路广播 C# .NET
http://http://www.c-sharpcorner.com/
介绍:
    目前,多点广播应用非常广泛。随着网络的带宽不断的增加以及多媒体
流的利用,广播将在不久的将来成为一种被广泛利用的方法。
 
什么是IP多路广播?
     IP多路广播是一种宽带存储技术,他可以用来解决网络上的信息拥挤,通过
向上千个接收者同时发送单一的信息流。他的特征是单想传播而无反回信号。
 这个观点可以被认为与卫星和电视之间的广播相似。一个单一的卫星向地面上的许多接收者发送信息,数据流沿着发送路径向所经过的路由器和主机发送信息,同时这些路由器和主机能复制数据流,再向其他路由器和主机发送。
IP 多路广播的需要:
      IP多路广播中数据流所经过的所有路由器必须可以使用广播。对于Internet
广播,所有的传输设备必须是MBONE(一种多媒体骨架结构,可以在全球范围内传输图象)中的一员。不过,随着越来越多的厂家开发出支持IP广播的路由器,MBONE将逐渐退出历史舞台。
 
系统需要:
    1.支持IP多路广播的操作系统,如Windows2000,XP. Berkeley Sockets, Windows Sockets 2 and Apple Macintosh Open Transport都支持IP多路广播。

    2..NET Framework API.   Microsoft.Net Framework
为应用程序访问Internet提供了分层的、可扩展的以及受管辖的网络服务,其名字空间System.Net和System.Net.Sockets包含丰富的类可以开发多种网络应用程序。.Net类采用的分层结构允许应用程序在不同的控制级别上访问网络,开发人员可以根据需要选择针对不同的级别编制程序,这些级别几乎囊括了Internet的所有需要--从socket套接字到普通的请求/响应,更重要的是,这种分层是可以扩展的,能够适应Internet不断扩展的需要。

这里,我将通过C#提供一个例子来实现IP多路广播
1.向一个广播组发送数据
  由于是单向传输,所以无须握手,在这里我们用UDP协议。
  //创建一个socket
 Socket s=new Socket(AddressFamily.InterNetwork, _
       SocketType.Dgram, _
       ProtocolType.Udp);
 //AddressFamily.InterNetwork IP 版本 4 的地址。
 //SocketType.Dgram 支持数据文报,即最大长度固定(通常很小)的无连接、不可靠消息。消息可能    //会丢失或重复并可能在到达时不按顺序排列。Dgram 类型的 Socket 在发送和接收数据之前不需要  //任何连接,并且可以与多个对方主机进行通讯。
 //SocketType 隐式地指示将在 AddressFamily 内使用哪一个 ProtocolType。例如,当 SocketType   //为 Dgram 时,ProtocolType 始终为 Udp。当 SocketType 为 Stream 时,ProtocolType 始终为   //Tcp。 
 // 多路广播数据包的有效 IP 地址范围为 224.0.0.0 到 239.255.255.255 之间。
 IPAddress ip=IPAddress.Parse("224.5.6.7");
 s.SetSocketOption(SocketOptionLevel.IP, _
     SocketOptionName.AddMembership, _   
     new_MulticastOption(ip));
 //SocketOptionLevel 参数解释:
 //IP 套接字选项应用于 IP 套接字。
 //Socket 套接字选项应用于套接字本身。
 //Tcp 套接字选项应用于 TCP 套接字。
 //Udp 套接字选项应用于 UDP 套接字。
 
 //SocketOptionName.AddMembership
 //AddMembership 添加一个 IP 组成员。
 
 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 2);
 //SocketOptionName.MulticastTimeToLive  IP多路广播生存时间。
 
 IPEndPoint ipep=new IPEndPoint(ip, 4567);
 s.Connect(ipep);
 // 创建发送的数据 ABCDEFGHIJ
 byte[] b=new byte[10];
 for(int x=0;x<b.Length;x++) b[x]=(byte)(x+65);
 // 发送数据
 s.Send(b,b.Length,SocketFlags.None);
 // 关闭socket
 s.Close();
2. 多路广播的接收数据程序:
  我们已经发送字母 ABCDEFGHIJ 到广播组224.5.6.7 通过端口 4567. 所有监听的程序都将收到这组数据
Socket s=new Socket(AddressFamily.InterNetwork, SocketType.Dgram,ProtocolType.Udp);
// 与和发送方相似的方法建立一个socket
IPEndPoint ipep=new IPEndPoint(IPAddress.Any, 4567);
s.Bind(ipep);
// 任何监听端口为4567的IP都将收到数据
IPAddress ip=IPAddress.Parse("224.5.6.7");
s.SetSocketOption(SocketOptionLevel.IP, _
                  SocketOptionName.AddMembership, _
           new MulticastOption(ip,IPAddress.Any));
// 将socket加入广播组 224.5.6.7.
byte[] b=new byte[1024];
s.Receive(b);
string str = System.Text.Encoding.ASCII.GetString(b,0,b.Length);
Console.WriteLine(str.Trim());
// 于是我们可以接收到这个广播组所发出的任何数据。
 
 
 
相关文章
 
Sendkeys 和 Sendmessage 使用技巧一例
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Function sqrx(ByVal x As Double) As String ' 计算平方根(比VB DOUBLE 类型精度高)
Dim temp As String, i As Long, j As Long
Shell "Calc.EXE", vbMinimizedNoFocus '运行计算器
temp = x & "y0.5="
For i = 1 To Len(temp)
SendKeys Mid(temp, i, 1), True '向计算器顺序发送按键消息X (X^Y) 0.5=
Next
temp = String(64, Chr(0))
i = FindWindow(vbNullString, "计算器") '窗口句柄
j = FindWindowEx(i, ByVal 0&, "Edit", vbNullString) '编辑框句柄
SendMessage j, &HD, Len(temp), ByVal temp '发送编辑框文本至temp
SendKeys "%{F4}", True '调用ALT+F4关闭计算器窗口
sqrx = temp
End Function
Private Sub Command1_Click()
Dim i As Integer
For i = 17 To 24
Debug.Print "sqrx(" & i & ")=" & sqrx(i)
Next
End Sub
 
返回:
sqrx(17)=4.1231056256176605498214098559741                              
sqrx(18)=4.2426406871192851464050661726291                              
sqrx(19)=4.3588989435406735522369819838596                              
sqrx(20)=4.4721359549995793928183473374626                              
sqrx(21)=4.582575694955840006588047193728                               
sqrx(22)=4.6904157598234295545656301135445                              
sqrx(23)=4.7958315233127195415974380641627                              
sqrx(24)=4.8989794855663561963945681494118      
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值