热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

利用FlashXMLSocket实现”服务器推”技术

利用FlashXMLSocket实现”服务器推”技术的基础是:1.Flash提供了XMLSocket类,服务器利用Socket向Flash发送数据;2.JavaScript和Flash的

     利用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:  
 2:  xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 3:      
 4:           
 
 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\n";
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+"\n"+ event.text;
29:               }
30:          ]]>
31:      
32:      
33:      label="Connect" fOntSize="12" id="btnConnect" left="10" top="20" click="ConncetServer()"/>
34:      label="Send" fOntSize="12" id="btnSend" left="80" top="20" click="Send();" />
35:      borderColor="#010A10" id="txtContent" left="10" top="110" right="10" bottom="10" backgroundColor="#DEEEF3" cornerRadius="12"/>
36:  

 

        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= "+ "*" + "\" to-ports=\"8080\"/>\0";
 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!\0");
 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


推荐阅读
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • 本文介绍了2015年九月八日的js学习总结及相关知识点,包括参考书《javaScript Dom编程的艺术》、js简史、Dom、DHTML、解释型程序设计和编译型程序设计等内容。同时还提到了最佳实践是将标签放到HTML文档的最后,并且对语句和注释的使用进行了说明。 ... [详细]
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
author-avatar
小赖小燕_380
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有