silverlight 连接 socket 通讯

该文章转自 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程序能够通过挂起的连接通讯  ···晕 不能上附件? 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值