该文章转自 http://hi.baidu.com/paycom/blog/item/9acad1f9acc96b5f242df2cb.html
|
silverlight 2(Beta)中的Socket应用示例
2008-07-20 00:49
步骤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(); } } 这里基本上都是开发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 > 然后将下面的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(); } } 这样,程序开发就完成了.下面进行第三步,演示(如下图): |
这几天一直在搞这个东西,网上的前辈们搞的有一个很好的实例,但是那个是以前 silverlight 1 可以用的版本,现在的2根本用不鸟,需要配置一个安全策略服务程序跑起来,让silverlight程序能够通过挂起的连接通讯 ···晕 不能上附件?