silverlight 2(Beta)中的Socket应用示例
来源:互联网 发布:js时间区间选择插件 编辑:程序博客网 时间:2024/05/16 19:40
注:本文的代码示例摘自50 New Silverlight 2 Beta 1 Screencasts 视频教程系列.
作为silverlight 2中新加入的特性,Sockets 会帮助我们开发功能强大,灵活高效的网络程序.
原本我想自己写一个例子来着,但在网上看了一遍,发现Mike Taulty已经作了一套教程来实践sl2.0
中的新特性. 所以我就依葫芦画瓢,按教程中的步骤走了一遍,发现的silverlight2 中进行socket开
发与我们平时写socket应用没什么太大的分别.因为大家平时都很忙,相信也没多少时间去听什么课
程,所以我就把这个实例的开发步骤在这里做一个罗列,看看把"大象关进冰箱"到底要用几步,呵呵:)
步骤1: 建立一个console的服务端项目
因为是socket开发,肯定要有一个sever端,因为是演示,所以示例中直接将服务器端的侦听代码
写入了main()函数,代码段如下:
这里基本上都是开发socket应用时常用的类,我就不多说了,相信搞过socket开发的朋友一看便知.
步骤2: 创建silverlight Application 项目(也就是我们说的client)
将下面的xaml代码放入Page.xaml中
然后将下面的cs代码放入Page.xaml.cs文件:
这样,程序开发就完成了.下面进行第三步,演示(如下图):
好了,今天的内容就到这了:)
下载源码请 点击这里:)
作为silverlight 2中新加入的特性,Sockets 会帮助我们开发功能强大,灵活高效的网络程序.
原本我想自己写一个例子来着,但在网上看了一遍,发现Mike Taulty已经作了一套教程来实践sl2.0
中的新特性. 所以我就依葫芦画瓢,按教程中的步骤走了一遍,发现的silverlight2 中进行socket开
发与我们平时写socket应用没什么太大的分别.因为大家平时都很忙,相信也没多少时间去听什么课
程,所以我就把这个实例的开发步骤在这里做一个罗列,看看把"大象关进冰箱"到底要用几步,呵呵:)
步骤1: 建立一个console的服务端项目
因为是socket开发,肯定要有一个sever端,因为是演示,所以示例中直接将服务器端的侦听代码
写入了main()函数,代码段如下:
static void Main(string[] args)
{
Console.WriteLine("使用Silverlight Socket 发送信息演示:");
Console.WriteLine("==================================================");
Console.WriteLine("");
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Bind(new IPEndPoint(IPAddress.Any, 4502));
socket.Listen(5);
while (true)
{
Socket s = socket.Accept();
Thread t = new Thread(() =>
{
try
{
while (true)
{
byte[] buffer = new byte[1024];
int receive = s.Receive(buffer);
if (receive != 0)
{
Console.WriteLine(Encoding.Unicode.GetChars(buffer, 0, receive));
}
}
}
finally
{
s.Close();
}
});
t.Start();
}
}
{
Console.WriteLine("使用Silverlight Socket 发送信息演示:");
Console.WriteLine("==================================================");
Console.WriteLine("");
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Bind(new IPEndPoint(IPAddress.Any, 4502));
socket.Listen(5);
while (true)
{
Socket s = socket.Accept();
Thread t = new Thread(() =>
{
try
{
while (true)
{
byte[] buffer = new byte[1024];
int receive = s.Receive(buffer);
if (receive != 0)
{
Console.WriteLine(Encoding.Unicode.GetChars(buffer, 0, receive));
}
}
}
finally
{
s.Close();
}
});
t.Start();
}
}
这里基本上都是开发socket应用时常用的类,我就不多说了,相信搞过socket开发的朋友一看便知.
步骤2: 创建silverlight Application 项目(也就是我们说的client)
将下面的xaml代码放入Page.xaml中
<UserControl x:Class="SocketClient.Page"
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="400" Height="300">
<Grid x:Name="LayoutRoot" Background="White" ShowGridLines="True">
<Grid.RowDefinitions >
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBox x:Name="txtToSend" Grid.Row="0"/>
<Button Grid.Row="1" Click="OnSend" Content="Send" Margin="20" />
</Grid>
</UserControl>
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="400" Height="300">
<Grid x:Name="LayoutRoot" Background="White" ShowGridLines="True">
<Grid.RowDefinitions >
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBox x:Name="txtToSend" Grid.Row="0"/>
<Button Grid.Row="1" Click="OnSend" Content="Send" Margin="20" />
</Grid>
</UserControl>
然后将下面的cs代码放入Page.xaml.cs文件:
public partial class Page : UserControl
{
Socket socket;
//发送信息按钮的单击事件
void OnSend(object sender, EventArgs args)
{
byte[] bytes = Encoding.Unicode.GetBytes(txtToSend.Text);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
SocketAsyncEventArgs socketArgs = new SocketAsyncEventArgs()
{
RemoteEndPoint = new DnsEndPoint(
Application.Current.Host.Source.DnsSafeHost, 4502)
};
socketArgs.Completed += OnOperationCompleted;
socketArgs.UserToken = bytes;
socket.ConnectAsync(socketArgs);
}
//将数据放入buffer并进行异步发送
void OnOperationCompleted(object sender, SocketAsyncEventArgs e)
{
e.Completed -= OnOperationCompleted;
byte[] bytes = (byte[])e.UserToken;
SocketAsyncEventArgs sendArgs = new SocketAsyncEventArgs();
sendArgs.SetBuffer(bytes, 0, bytes.Length);
sendArgs.Completed += OnSendCompleted;
socket.SendAsync(sendArgs);
}
//发送完成后,关闭当前socket链接
void OnSendCompleted(object sender, SocketAsyncEventArgs e)
{
socket.Close();
}
}
{
Socket socket;
//发送信息按钮的单击事件
void OnSend(object sender, EventArgs args)
{
byte[] bytes = Encoding.Unicode.GetBytes(txtToSend.Text);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
SocketAsyncEventArgs socketArgs = new SocketAsyncEventArgs()
{
RemoteEndPoint = new DnsEndPoint(
Application.Current.Host.Source.DnsSafeHost, 4502)
};
socketArgs.Completed += OnOperationCompleted;
socketArgs.UserToken = bytes;
socket.ConnectAsync(socketArgs);
}
//将数据放入buffer并进行异步发送
void OnOperationCompleted(object sender, SocketAsyncEventArgs e)
{
e.Completed -= OnOperationCompleted;
byte[] bytes = (byte[])e.UserToken;
SocketAsyncEventArgs sendArgs = new SocketAsyncEventArgs();
sendArgs.SetBuffer(bytes, 0, bytes.Length);
sendArgs.Completed += OnSendCompleted;
socket.SendAsync(sendArgs);
}
//发送完成后,关闭当前socket链接
void OnSendCompleted(object sender, SocketAsyncEventArgs e)
{
socket.Close();
}
}
这样,程序开发就完成了.下面进行第三步,演示(如下图):
好了,今天的内容就到这了:)
下载源码请 点击这里:)
- silverlight 2(Beta)中的Socket应用示例
- Silverlight Socket通讯示例
- Silverlight 2.0 beta 2
- 推荐两个不错的基于SilverLight 2 Beta 应用
- 两个不错的基于SilverLight 2 Beta 应用
- 推荐两个不错的基于SilverLight 2 Beta 应用
- Silverlight 2 Beta 2 中的 ClientAccessPolicy.xml 文件
- Silverlight 2 Beta 2 中的 ClientAccessPolicy.xml 文件
- Silverlight Beta 2 與 RC
- Android Socket 应用示例
- Silverlight 2 Beta 2来了!
- Silverlight 2 Beta 2正式发布
- Silverlight 2 Beta 2崭新亮相
- Silverlight 2 Beta 2 中文字体完全解决方案
- Microsoft Silverlight 2 beta 2 SDK 下载
- Silverlight 2 Beta 2的Isolated Storage
- Microsoft Silverlight 2 Beta 1 已经发布
- Microsoft Silverlight 2 Beta 1 已经发布
- "下金蛋" OR "造大便"-----关于产出与产能的思考
- 在silverlight中使用Linq TO XML
- 在silverlight 2 (beta1) 中使用BackgroundWorker
- 在silverlight中使用OpenFileDialog浏览本地图片
- 动态加载Silverlight应用的dll文件(可实现插件功能)
- silverlight 2(Beta)中的Socket应用示例
- 推荐一个基于Microsoft ASP.NET MVC Preview 2 的应用示例
- DinnerNow中的Work Flow应用(下) --- 订单流程
- 你是否积极主动(Proactivity)?
- DinnerNow中的Work Flow应用(上) --- 订单流程
- LCD和文件系统
- DinnerNow中的ASP.NET Ajax Extensions应用---选餐流程
- DinnerNow中的WCF应用 --- 首页数据加载
- 让双网卡一台电脑拥有两个网关(转)