`

silverlight socket服务端

 
阅读更多
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net.Sockets;
using System.Net;
using System.Threading;

namespace SoketServer
{
    public partial class Form1 : Form
    {
        delegate void HanderVoid();
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
                //监听策略请求和发送策略请求方法

            ////建立一个子线程,用于创建Socket来监听策略请求和发送。

            ThreadStart pcts = new ThreadStart(PolicyThread);



            Thread policythread = new Thread(pcts);



            policythread.Start();



            //建立一个子线程,用于创建Socket来监听信息请求和发送。

            ThreadStart infots = new ThreadStart(InfoThread);



            Thread infothread = new Thread(infots);



            infothread.Start();
        }

         void PolicyThread()
        {

            //创建一个Socket用来监听943(固定的)端口的策略请求        

            Socket policy = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            policy.Bind(new IPEndPoint(IPAddress.Any, 943));

            policy.Listen(10);



            //无限循环监听

            while (true)
            {

                if (policy.Blocking)//如果Socket是阻止模式的(这个东西实际上可以用不)
                {



                    //创建Socket,用来获取监听Socket的第一个Socket链接

                    Socket _policy = policy.Accept();



                    //定义一个字符串,该字符串与Silverlight发送过来的请求字符串一样。

                    string policyRequestString = "<policy-file-request/>";



                    //定义一个字节数组

                    byte[] b = new byte[policyRequestString.Length];



                    //将客户端发送过来,服务器接收到的字节数组存入b中

                    _policy.Receive(b);



                    //将接收到的字节数组转换成字符串

                    string requeststring = System.Text.Encoding.UTF8.GetString(b, 0, b.Length);



                    //显示客户端发送的字符串

                    Console.WriteLine(requeststring);



                    //比对客户端发送过来的字符串是否和之前定义的额定好的策略请求字符串相同,如果相同,说明该请求是一个策略请求。

                    if (requeststring == policyRequestString)
                    {

                        //如果客户端发送的是一个策略请求,服务器发送策略文件到客户端

                        SendPolicy(_policy);



                        Console.WriteLine("Policy File have sended");



                        //关闭当前连接Socket

                        _policy.Close();

                    }

                    else// 否则,显示错误
                    {
                        Console.WriteLine("not a sure request string!");
                    }

                }



            }

        }

        //监听信息请求和发送信息方法

         void InfoThread()
        {

            //创建一个Socket用于监听4502端口,获取接收客户端发送过来的信息

            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            socket.Bind(new IPEndPoint(IPAddress.Any, 4502));

            socket.Listen(10);

            //无线循环监听

            while (true)
            {

                //创建Socket,用来获取监听Socket的第一个Socket链接

                Socket _socket = socket.Accept();


                
                //创建一个空字节数组

                byte[] b2 = new byte[1024];



                //将接受到的字节数组存入到之前定义的b2字节数组中。

                _socket.Receive(b2);

                //显示接收到的信息

               // Console.WriteLine(Encoding.UTF8.GetString(b2));
             
              
               // f.richTextBox1.AppendText(Encoding.UTF8.GetString(b2));

                this.Invoke(new HanderVoid(delegate
                {
                    this.richTextBox1.AppendText(Encoding.UTF8.GetString(b2));
                }));
                //发回一个信息给客户端,该信息是字节数组,所以我们将信息字符串转换成字节数组

                _socket.Send(Encoding.UTF8.GetBytes("This Send Over!!"));
              

                //关闭当前Socket连接

             _socket.Close();

            }

        }

 
         //发送策略文件的方法

        //参数是传递进来的Socket连接

         void SendPolicy(Socket socket)
        {

            //创建一个文件流,该文件留指定代开一个策略文件,至于策略文件的格式,MS的Silverlight有详细说明和配置方法

            using (FileStream fs = new FileStream(@"p.txt", FileMode.Open))
            {
                int length = (int)fs.Length;

                byte[] bytes = new byte[length];

                //将策略文件流读到上面定义的字节数组中

                fs.Read(bytes, 0, length);
                socket.Send(bytes);
            }

        }
       
        //监听策略请求和发送策略请求方法

      

     
    }
}

 

分享到:
评论

相关推荐

    Silverlight Socket

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

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

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

    silverlight socket 简单 通信 范例

    例子中,silverlight是客户端(这是当然的),服务端也是用...4.Silverlight的Socket收到访问策略的限制,服务端必须监听,并提供ClientAccessPolicy的支持。通常是在943端口(TCP)进行监听,也可以在HTTP 80端口监听。

    开源C# SOCKET服务器,支持WINDOWS云,LIUNX MONO 2.0

    提供内置的Flash/Silverlight策略服务器。 新增了多个命令程序集。 新增了更多的的QuickStart示例项目。 使用TPL处理多线程相关事务。 将接收到的数据处理过程从完成端口线程池转移到工作线程池(异步模式下)。...

    Silverlight编程基本知识及技巧

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

    Silverlight2.0功能展示Demo源码

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

    一步一步学习Silverlight之基础知识篇

    在Silverlight 2中,开发者可以利用JSON、Web Service、Windows Communication Foundation (WCF)以及Socket支持来实现数据交互和网络通信,这大大扩展了其功能范围。JSON支持使得数据交换更加轻量级和高效,而WCF则...

    silverlight使用大全

    - WCF RIA Services:简化客户端和服务端的数据交换,提供数据服务接口。 7. **网络通信** - WebClient和HttpWebRequest:发送HTTP请求,获取服务器数据。 - Socket通信:实现低级的TCP/IP通信,用于实时或高...

    Wiley-Professional.Silverlight.4.2010.RETAiL.EBook-DiGiBook

    该部分内容涉及了Silverlight在网络通信方面的能力,包括HTTP请求、Socket编程等内容。这对于创建需要频繁与服务器交互的应用程序非常有用。 ##### 第11章:业务应用构建 本章关注的是如何使用Silverlight来构建...

    silverlightchatroom10聊天源码.

    4. **WCF服务**:可能使用了Windows Communication Foundation(WCF)来构建服务端,它提供了多种通信模式和协议,可以方便地实现客户端和服务器之间的数据交换。 5. **MVVM模式**:在Silverlight开发中,Model-...

Global site tag (gtag.js) - Google Analytics