您的位置:首页 > 其它

稳扎稳打Silverlight(55) - 4.0通信之对UDP协议的支持: 通过 UdpSingleSourceMulticastClient 实现 SSM(Source Specific Multicast),即“源特定多播”

2010-09-27 12:23 573 查看
[索引页]
[源码下载]

[align=center]稳扎稳打Silverlight(55) - 4.0通信之对UDP协议的支持: 通过 UdpSingleSourceMulticastClient 实现 SSM(Source Specific Multicast),即“源特定多播”[/align]

作者:webabcd

介绍
Silverlight 4.0 对 UDP 协议的支持:

UdpSingleSourceMulticastClient - 一个从单一源接收多播信息的客户端,即 SSM 客户端

在线DEMO
/article/4589659.html

示例
演示如何通过 UdpSingleSourceMulticastClient 实现 SSM
1、服务端
Form1.cs

代码

/*
* 用于演示 SSM 的客户端
*/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Navigation;

namespace Silverlight40.Communication
{
public partial class UdpSingleSourceMulticastClientDemo : Page
{
private UdpSingleSourceMulticastChannel _channel;

public UdpSingleSourceMulticastClientDemo()
{
InitializeComponent();
}

protected override void OnNavigatedTo(NavigationEventArgs e)
{
txtUserName.Text = "匿名" + new Random().Next(1000, 9999).ToString();

_channel = new UdpSingleSourceMulticastChannel(IPAddress.Parse("172.16.100.111"), IPAddress.Parse("224.0.0.1"), 3003, 2048);
_channel.Opening += new EventHandler(_channel_Opening);
_channel.Received += new EventHandler<UdpPacketEventArgs>(_channel_Received);
_channel.Closing += new EventHandler(_channel_Closing);

Application.Current.Exit += new EventHandler(Current_Exit);

_channel.Open();
}

void _channel_Opening(object sender, EventArgs e)
{
lstAllMsg.Items.Insert(0, "已经连上多播源");
}

void _channel_Received(object sender, UdpPacketEventArgs e)
{
// 因为已经指定了接收信息的缓冲区大小是 2048 ,所以如果信息不够 2048 个字节的的话,空白处均为“\0”
string message = string.Format("{0} - 来自:{1}", e.Message.TrimEnd('\0'), e.Source.ToString());
lstAllMsg.Items.Insert(0, message);
}

void _channel_Closing(object sender, EventArgs e)
{
lstAllMsg.Items.Insert(0, "已经断开多播源");
}

void Current_Exit(object sender, EventArgs e)
{
_channel.Dispose();
}

private void btnSend_Click(object sender, RoutedEventArgs e)
{
SendMsg();
}

private void txtMsg_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
SendMsg();
}

private void SendMsg()
{
_channel.Send(string.Format("{0}: {1} - [{2}]", txtUserName.Text, txtSendMsg.Text, DateTime.Now.ToString("HH:mm:ss")));
txtSendMsg.Text = "";
}
}
}

OK
[源码下载]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐