`

silverlight socket客户端

 
阅读更多
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.Threading;
using System.Net.Sockets;
using System.Text;

namespace SilverlightSoket
{
    public partial class SoketTest : ChildWindow
    {
        public SoketTest()
        {
            InitializeComponent();
        }

        private void OKButton_Click(object sender, RoutedEventArgs e)
        {
         
            soketServer.Mysocket.Send(Encoding.UTF8.GetBytes(textBox1.Text));
            
           

        }

        private void CancelButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = false;
        }
    }

    public class soketServer
    {
        public delegate void HandelShowInfo(string info,System.Net.Sockets.Socket e);
        public event HandelShowInfo EventShowInfo;
        //定义一个可在全局使用的Socket

       static soketServer m_mysocket;
       static System.Net.Sockets.Socket socket;
       static object m_lock=new object ();
        //定义一个同步上下文类,用来将子线程的操作调度到主线程上以可控制UI属性。

        SynchronizationContext syn;

        /// <summary>
        /// 触发外部事件
        /// </summary>
        /// <param name="info"></param>
        /// <param name="e"></param>
        void InvokeInfo(string info, System.Net.Sockets.Socket e)
        {
            if (this.EventShowInfo != null)
                this.EventShowInfo.Invoke(info, e);
        }

        static  soketServer()
        {
            if (m_mysocket != null)
                return;
            lock (m_lock)
            {
                socket = new Socket(AddressFamily.InterNetwork,
                     SocketType.Stream, ProtocolType.Tcp);
                m_mysocket = new soketServer();
            }
        }

        #region property

        public static soketServer Mysocket
        {
            get { return m_mysocket; }
            set { m_mysocket = value; }
        }

        #endregion

        public  void Send(byte[] Content)
        {
            syn = SynchronizationContext.Current;


            //定义并实例一个Socket参数

            SocketAsyncEventArgs socketArgs = new SocketAsyncEventArgs();



            //设置到远程终节点属性(4502端口,为什么是4502,MS的SL通信安全上有)

            socketArgs.RemoteEndPoint = new DnsEndPoint(Application.Current.Host.Source.DnsSafeHost, 4502);

            //设置好当Socket任何一个动作完成时的回调函数。

            socketArgs.Completed += new EventHandler<SocketAsyncEventArgs>(socketArgs_Completed);

            //Socket参数的用户标识,实际上就是一个可以传递的OBJECT参数。

            socketArgs.UserToken = Content;
            socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.ConnectAsync(socketArgs);
        }

        void socketArgs_Completed(object sender, SocketAsyncEventArgs e)
        {

            //当任何一个Socket动作完成,都回调该函数,然后对LastOperation进行判断后继续执行相应的部分

            switch (e.LastOperation)
            {

                case SocketAsyncOperation.Connect:

                    ProcessConnect(e);

                    break;

                case SocketAsyncOperation.Receive:

                    ProcessReceive(e);

                    break;

                case SocketAsyncOperation.Send:

                    ProcessSend(e);

                    break;

            }

        }

        //将数据放入buffer并进行异步发送

        void ProcessConnect(SocketAsyncEventArgs e)
        {



            //当连接成功后,获取Socket参数 e传递过来的用户标识(也就是本示例中用户输入的字符串转换的Byte字节数组)

            byte[] bytes = (byte[])e.UserToken;



            //设置Socket参数的缓冲区参数,将我们的字节数组设置为Socket的缓冲区。

            e.SetBuffer(bytes, 0, bytes.Length);



            //同步一下上下文,显示一下当前的状态信息。

            syn.Post(GetText, "States:" + e.SocketError.ToString() + "," + e.LastOperation.ToString());



            //发送数据

          
               socket.SendAsync(e);
          


        }



        //发送完成后,执行等待接收服务器发回的数据

        void ProcessSend(SocketAsyncEventArgs e)
        {

            //定义个空的字节数组,设置好其大小

            byte[] bytes = new byte[1024];

            //将前面定义字节数组设置成缓冲区

            e.SetBuffer(bytes, 0, bytes.Length);

            //执行异步接收

            socket.ReceiveAsync(e);

        }



        //当接收完成后

        void ProcessReceive(SocketAsyncEventArgs e)
        {

            //在执行好接收后,本地SOCKET的缓冲区就会被服务器发送的数据填充。

            //显示下信息,当然也是用同步上下文的方式,在显示信息的时候,就直接将缓冲区的字节数组转换成字符串。

            syn.Post(GetText, Encoding.UTF8.GetString(e.Buffer, 0, e.Buffer.Length) + " and Received");

            //关闭Socket连接

          socket.Close();

            //最后显示下,Socket关闭。

            syn.Post(GetText, "Socket Closed");

        }



        //同步上下文调用的方法。

        void GetText(object str)
        {

            MessageBox.Show(str.ToString());
        }
    }

}

 

分享到:
评论

相关推荐

    Silverlight Socket

    总结,"Silverlight Socket"项目提供了一个完整的服务端和客户端Socket通信示例,开发者可以通过它学习如何在Silverlight环境中实现Socket通信,这对于理解网络编程和开发实时交互式Web应用至关重要。通过深入研究和...

    SilverLight Socket 异步通讯实例

    在"SilverLight Socket 异步通讯实例"中,我们关注的是如何在Silverlight应用中利用Socket进行异步通信。异步通信是关键,因为它使得用户界面在等待服务器响应时不会被阻塞,从而提供更好的用户体验。在Silverlight...

    silverlight socket 简单 通信 范例

    例子中,silverlight是客户端(这是当然的),服务端也是用C#语言 仔细搜索了一下大家写的东西,感觉这个还可以,就拿出来分享给大家,希望对大家有点小用吧 总结Silverlight中应用Socket的几点特殊之处 1.所有的...

    Silverlight socket通信Dome

    提供的"SocketDemo"很可能是包含一个完整的Silverlight Socket通信示例项目,包含了客户端和服务器端的代码示例,可以用来学习和理解如何在Silverlight应用中实现Socket通信。 总的来说,Silverlight Socket通信...

    Asp.net + Silverlight Socket多人聊天室源码版

    Silverlight Socket +Asp.net多人聊天室源码版,主要研究Socket通信,有程序包括客户端和服务端。  服务端:实例化Socket, 绑定, 监听, 连接, 接收数据, 发送数据等……  客户端:实例化Socket, 指定服务端地址,...

    Silverlight调用Socket程序

    VS2012 程序, 共包括3个Project ,一个Silverlight作为客户端 , 一个网站 ,一个控制台程序作为服务器段, 代码有注释,讲述了Silverlight调用Socket的基本原理。

    silverlight_socket_chat

    《基于Silverlight的Socket聊天室源码解析》 在IT领域,实时通信技术的应用日益广泛,其中WebSocket协议凭借其双向通信、低延迟等优势成为现代Web应用中的热门选择。而Silverlight,作为微软推出的一种RIA(Rich ...

    Silverlight Socket通信

    在Silverlight应用中,Socket通信扮演着重要的角色,它允许应用程序通过网络进行低级别的数据传输,实现客户端与服务器间的双向通信。本文将深入探讨Silverlight中的Socket通信,包括基础概念、使用场景、实现方式...

    silverlight+Socket

    - **客户端**:由Silverlight UI和Socket通信逻辑组成,用户可以通过输入框发送消息,而接收到的消息则显示在聊天窗口中。 - **服务器**:使用Socket监听客户端连接,处理客户端的连接请求,转发消息到其他在线用户...

    Jw-异步socket+silverlight聊天室

    这个项目的核心在于结合了Socket的高效网络通信能力和Silverlight的富客户端展示效果,为用户提供了一个交互性强、响应速度快的聊天环境。 首先,我们来了解一下**Silverlight**。这是一种由微软开发的浏览器插件,...

    silverlight视频聊天Demo

    Silverlight提供了System.Net命名空间,其中包含Socket类,可以用来建立客户端与服务器之间的连接,实现数据的双向传输。 在视频聊天Demo中,可能使用了Silverlight的RIA服务或者WCF(Windows Communication ...

    Silverlight编程基本知识及技巧

    2. **Socket通信实现Silverlight客户端实时数据获取**:Silverlight支持通过Socket进行网络通信,允许应用实时接收和发送数据。在示例中,模拟了GPS数据的获取,这可能涉及到使用Socket连接到服务器,接收并处理实时...

    silverlight实时聊天工具

    为了实现这一目标,我们可以采用异步编程模型,利用Silverlight的BeginConnect和EndConnect方法启动非阻塞式的Socket连接,避免因等待网络响应而阻塞UI线程。同时,消息的发送和接收也需要异步处理,确保用户在接收...

    Redis.SilverlightClient:从 Silverlight 使用 Redis 的组件

    Redis.SilverlightClient ##Redis.Silverlight 客户端是一个库,用于订阅 Redis PUB/SUB 频道,由于 Silverlight 网络访问限制,该频道监听范围为 4502-4534 的端口。 ##SilverlightPolicyServer 是一个组件,用于在...

    一步一步学silverlight

    - **Socket编程**:对于实时通信需求,可以通过Socket编程实现客户端与服务器之间的双向通信。 #### 七、总结 本书《一步一步学Silverlight》非常适合Silverlight初学者阅读,内容覆盖了从基础知识到高级技巧的...

    Silverlight2.0功能展示Demo源码

    Silverlight 2.0 Socket通信。开发一个多人聊天室。 服务端:实例化Socket, 绑定, 监听, 连接, 接收数据, 发送数据 客户端:实例化Socket, 指定服务端地址, 连接, 接收数据, 发送数据 23、Silverlight(25) - 2.0线程...

    SuperSocket 1.5文档

    - 主动从服务器推送数据到客户端 - 扩展服务器配置 - 实现命令过滤器和连接过滤器 - 多监听器和多服务器实例的创建和管理 - 动态语言实现自定义命令 - SuperSocket中的日志记录机制 - 内置Flash Silverlight策略...

    Silverlight40

    9. `Silverlight40.Web`:可能与Web服务器端的代码相关,如ASP.NET页面或服务,用于与Silverlight客户端交互。 10. `SocketServer`:可能是一个使用套接字(Socket)技术的服务器端代码,可能用于实现Silverlight...

    微软silverlight探秘教程(20集):网络通信与开发示例

    此外,还可以使用Silverlight的Socket类进行低级网络通信,支持实时数据流。 5. **数据绑定和MVVM模式**:Silverlight支持数据绑定机制,简化了UI与业务逻辑之间的通信。Model-View-ViewModel (MVVM)设计模式在...

Global site tag (gtag.js) - Google Analytics