zoukankan      html  css  js  c++  java
  • 利用Flash XMLSocket实现”服务器推”技术

         利用Flash XML Socket实现”服务器推”技术的基础是:1.Flash提供了XMLSocket类,服务器利用Socket向Flash发送数据;2.JavaScript和Flash的紧密结合,JavaScript和as可以相互调用。

         具体实现的方法:在HTML页面中陷入一个使用了XMLSocket类的Falsh程序。JavaScript通过调用此Flash程序提供的套接口接口与服务端的套接口进行通信。JavaScript在收到服务器端以XML格式传送的信息控制HTML的Dom对象改变页面的内容显示。

    image

    一、XMLSocket简介

          XMLSocket 类实现了客户端套接字,这使得运行 Flash Player 的计算机可以与由 IP 地址或域名标识的服务器计算机进行通信。 对于要求滞后时间较短的客户端/服务器应用程序,如实时聊天系统,XMLSocket 类非常有用。 传统的基于 HTTP 的聊天解决方案频繁轮询服务器,并使用 HTTP 请求来下载新的消息。 与此相对照,XMLSocket 聊天解决方案保持与服务器的开放连接,这一连接允许服务器即时发送传入的消息,而无需客户端发出请求。 若要使用 XMLSocket 类,服务器计算机必须运行可识别 XMLSocket 类使用的协议的守护程序。可以参考XMLSocket简介

    二、AS与JavaScript通信

          利用ExternalInterface可以实现AS与JavaScript的通信,具体请看Flex与JavaScript交互

    三、实现Socket

          客户端Flex:

     1:  <?xml version="1.0" encoding="utf-8"?>
     2:  <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
     3:      <mx:Script>
     4:          <![CDATA[
     5:              private var socket:XMLSocket=new XMLSocket();
     6:   
     7:              private function ConncetServer():void
     8:              {
     9:                  socket.addEventListener(DataEvent.DATA,OnReceived);
    10:                  socket.addEventListener(Event.CONNECT , onConnected);
    11:                  this.socket.connect("127.0.0.1",8080);
    12:              }
    13:   
    14:              private function onConnected(event:Event):void
    15:              {
    16:                  socket.send("begin connect");
    17:                  this.txtContent.text=this.txtContent.text+"conect success
    ";
    18:              }
    19:   
    20:              private function Send():void
    21:              {
    22:                  socket.send("message from flex");
    23:              }
    24:   
    25:               private function OnReceived(event:DataEvent):void
    26:               {    
    27:                  trace("receive data.");
    28:                  this.txtContent.text=this.txtContent.text+"
    "+ event.text;
    29:               }
    30:          ]]>
    31:      </mx:Script>
    32:      
    33:      <mx:Button label="Connect" fontSize="12" id="btnConnect" left="10" top="20" click="ConncetServer()"/>
    34:      <mx:Button label="Send" fontSize="12" id="btnSend" left="80" top="20" click="Send();" />
    35:      <mx:TextArea borderColor="#010A10" id="txtContent" left="10" top="110" right="10" bottom="10" backgroundColor="#DEEEF3" cornerRadius="12"/>
    36:  </mx:Application>

            Socket服务端:

      1:  using System;
      2:  using System.Collections.Generic;
      3:  using System.Linq;
      4:  using System.Text;
      5:  using System.Net;
      6:  using System.Net.Sockets;
      7:  using System.Threading;
      8:   
      9:  namespace SocketServer
     10:  {
     11:      class Program
     12:      {
     13:          static bool ServiceStartFlag = false;
     14:          static Socket socket;
     15:          static Thread thread;
     16:   
     17:          static void Main(string[] args)
     18:          {
     19:              socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
     20:              IPHostEntry ieh = Dns.GetHostEntry("localhost");
     21:              IPAddress localServerIP = ieh.AddressList[1];
     22:              IPEndPoint localIPEndPoint = new IPEndPoint(localServerIP, 8080);
     23:   
     24:              socket.Bind(localIPEndPoint);
     25:              socket.Listen(600);
     26:   
     27:              thread = new Thread(new ThreadStart(AcceptClient));
     28:              thread.IsBackground = true;
     29:              thread.Start();
     30:   
     31:              Console.ReadLine();
     32:          }
     33:   
     34:          static void AcceptClient()
     35:          {
     36:              ServiceStartFlag = true;
     37:   
     38:              while (ServiceStartFlag)
     39:              {
     40:                  try
     41:                  {
     42:                      Socket newSocket = socket.Accept();
     43:                      string onemessge = "<cross-domain-policy><allow-access-from domain="" + "*" + "" to-ports="8080"/></cross-domain-policy>";
     44:   
     45:                      byte[] tmpBytes = Encoding.UTF8.GetBytes(onemessge);
     46:                      newSocket.Send(tmpBytes);
     47:   
     48:                      Thread newThread = new Thread(new ParameterizedThreadStart(ReadMsg));
     49:                      newThread.IsBackground = true;
     50:                      object obj = newSocket;
     51:                      newThread.Start(obj);
     52:                  }
     53:                  catch (SocketException ex)
     54:                  {
     55:   
     56:   
     57:   
     58:                  }
     59:              }
     60:          }
     61:   
     62:          static void ReadMsg(object obj)
     63:          {
     64:              Socket socket = (Socket)obj;
     65:   
     66:              byte[] byteMessage = null; ;
     67:   
     68:              while (ServiceStartFlag)
     69:              {
     70:                  try
     71:                  {
     72:                      if (socket.Connected)
     73:                      {
     74:   
     75:                          byteMessage = new byte[1000];
     76:                          int len = socket.Receive(byteMessage);
     77:                          if (len > 0)
     78:                          {
     79:                              string sTime = DateTime.Now.ToShortTimeString();
     80:   
     81:                              string msg = sTime + ":" + "Message from:";
     82:   
     83:                              msg += socket.RemoteEndPoint.ToString() + Encoding.UTF8.GetString(byteMessage);
     84:                              Console.WriteLine(msg);
     85:                              byteMessage = null;
     86:   
     87:                              byte[] tmpBytes = Encoding.UTF8.GetBytes("Sended Sucessed!");
     88:   
     89:                              socket.Send(tmpBytes);
     90:                          }
     91:   
     92:   
     93:                      }
     94:                  }
     95:                  catch (SocketException ex)
     96:                  {
     97:                      Console.WriteLine(ex.Message);
     98:                  }
     99:              }
    100:          }
    101:      }
    102:  }
    103:   
    104:   

       运行结果:

    image

    image

  • 相关阅读:
    SFTP的使用
    java操作文件的创建、删除、遍历
    ios UICollectionView滑动时操作
    IOS自带json解析类解析json
    IOS把文件保存进沙盒目录
    python3.4安装suds
    Lua for windows中SciTe开启支持python的方法
    修改tabbarcontroller选中图片及选中颜色
    Android新版本SDK打开旧版本项目报错解决
    PHP5.4连接sqlserver
  • 原文地址:https://www.cnblogs.com/waw/p/4970054.html
Copyright © 2011-2022 走看看