silverlight 2(Beta)中的Socket应用示例

      注:本文的代码示例摘自50 New Silverlight 2 Beta 1 Screencasts 视频教程系列.

     作为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();
    }
}


     这里基本上都是开发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();
    }


}
   
      这样,程序开发就完成了.下面进行第三步,演示(如下图):

    
   
      好了,今天的内容就到这了:)

      下载源码请 点击这里:)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值