- 浏览: 399603 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
zhchyun2008:
这里有个小问题,背景有时候会出现?不知道如何解决
分享一个ToolTip类,趋于完美! -
heiliuer:
歌词可以用,我试了好几个,都行的
百度MP3音乐API接口及应用 -
connectu:
感觉不错,英文版的。
JMX in Action -
海阔天空1991:
楼主,有没有什么途径可以知道歌曲对应的信息?
百度MP3音乐API接口及应用 -
xiegqooo:
简单的关闭 tomcat
import java.io.IO ...
关于Java钩子的使用
一、准备:
服务端:JDK1.5 (这个不用介绍了吧?)
服务端IDE:eclipse (它的主页)
客户端:FLEX 3 (Adobe® Flex® 3 是用于构建和维护在所有主要浏览器、桌面和操作系统一致地部署的极具表现力的 Web 应用程序的高效率的开放源码框架。)
客户端IDE:Flex Builder 3 (它的官方摘要页)
二、缘分的相遇(建立连接):
既然是通信,当然第一步就是要建立连接啦。我们还是用最简单的看代码的方式来开始我们的连接。
==========================================
==服务端代码:Jserver1.java
==========================================
嘎嘎,怎么样 注释写得够清楚了吧?OK 让我们编译运行,得到的结果应该如图:
OK 再让我们来看看客户端的代码是怎么样的:
==========================================
==客户端代码:Jclient1.mxml
===================================================
界面非常简单啦,其实就是一个TextArea来显示连接的结果而已,运行的结果如下图(注意,服务端也应该在运行!):
在as3.0中,所有和网络通信有关的类都位于flash.net包中,这里使用的是Socket类对象。
==========================================
==我们来详细说明一下上面用到的Socket类:
==========================================
Socket对象的常用创建方法有下面2种:
或者
当指定了了服务器地址和端口,Socket对象将自动开始连接服务器。如果不指定,则需要条用connect方法才开始执行连接动作,意思就是,例二的代码和下面的代码是等效的:
完成连接动作后,接下来要获取服务端得返回信息。
Socket对象和URLLOADER啊之类的对象都是一样,利用事件机制来处理服务器端的信息,我们只要给Socket对象添加相关的事件监听函数就可以捕捉到服务器端的信息,Socket对象的事件主要有:
1 Event.CLOSE 连接中断事件。
2 Event.CONNECT 连接状态事件,表示已经成功连接了服务器。
3 IOErrorEvent.IO_ERROR 信息传递错误事件,一般是由服务器地址错误引起的。
4 ProgressEvent.SOCKET_DATA 服务器信息事件,当收到服务器的新信息时被触发。
==========================================
哈哈,经过上面的代码,我们的服务端MM和客户端GG终于通过Socket这个缘分宿命的相遇了!接下来会发生什么?我们继续往下看~~
三、第一封情书(客户端发送消息,服务端接受消息)
客户端GG在遇到服务端MM以后,终日变得茶饭不思,在折磨掉了无数根头发以后,客户端GG终于下定决心,要向服务端MM送出第一封情书啦!
既然是客户端GG送出情书,那我们先来看他到底是怎么做的:
==========================================
==客户端代码:Jclient2.mxml
==========================================
嘎嘎,情书的做法就上面那面简单,注释已经写得很清楚了,就不多说了。
OK,客户端GG的情书倒是送出去了,我们就来看看服务端MM是怎么接受这封情书的呢?
==========================================
==服务端代码:Jserver2.java
==========================================
运行结果如下:
HOHO 看样子我们的客户端GG的情书,服务端MM是顺利接受到啦。
四、服务端MM的心思(多客户端通信)
在服务端MM收到客户端GG的情书以后,突然发现自己原来还是蛮受欢迎的呢。但是有句俗话说的好,那就是“不能为了一棵树放弃一片森林”。所以服务端MM就想,能不能多接受几个客户端GG的情书呢?(真TMD贱。。。)
OK,既然服务端MM有了这个需求(虽然是很贱的需求),那我们就要来满足她!
来看服务端的代码:
=========================================
==Jserver3.java
=========================================
客户端的代码和上面的客户端代码一模一样的,这里就不多说啦!
好了,在这里就简单的给大家介绍了如何实现java和flash(flex)实现socket通信的简单功能。有时间的话,再给大家来个简单的聊天室实现(那个时候的服务端MM就更贱了,不仅收着N多客户端GG的情书,竟然还把情书广播给所有的客户端GG,BS!)。嘎嘎 其实原理就是上面所说的这些,大家自己都可以尝试下。
服务端:JDK1.5 (这个不用介绍了吧?)
服务端IDE:eclipse (它的主页)
客户端:FLEX 3 (Adobe® Flex® 3 是用于构建和维护在所有主要浏览器、桌面和操作系统一致地部署的极具表现力的 Web 应用程序的高效率的开放源码框架。)
客户端IDE:Flex Builder 3 (它的官方摘要页)
二、缘分的相遇(建立连接):
既然是通信,当然第一步就是要建立连接啦。我们还是用最简单的看代码的方式来开始我们的连接。
==========================================
==服务端代码:Jserver1.java
==========================================
import java.net.*; import java.io.*; public class Jserver1 { public static void main(String[] args) { ServerSocket server=null; try{ server=new ServerSocket(719);//在端口719建立一个服务器套接字对象 System.out.println("服务端等待"); while(true){ System.out.println("等待客户机"); Socket newSocket=server.accept();//客户端向我们建立的服务器套接字发送连接请求,则向下执行 System.out.println("已与客户机连接"); } }catch(IOException ie) { System.out.println(ie); }finally{ try { if(server!=null) server.close();//关闭服务器套接字。为什么要用finally关键字来做这个事呢?HOHO thinking in java里大师已经说得很清楚了,就是无论出现什么异常,都保证我们的服务端套接字能被关闭。 }catch(IOException ie){} } }
嘎嘎,怎么样 注释写得够清楚了吧?OK 让我们编译运行,得到的结果应该如图:
OK 再让我们来看看客户端的代码是怎么样的:
==========================================
==客户端代码:Jclient1.mxml
===================================================
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creati f width="349" height="326"> <mx:Script> <![CDATA[ import flash.net.Socket; private var socket:Socket; internal function initApp():void { socket=new Socket();//创建Socket对象 socket.connect("localhost",719); //连接服务器 socket.addEventListener(Event.CONNECT,connectFun);//监听是否连接上服务器 socket.addEventListener(Event.CLOSE,closeFun);//监听套接字连接是否关闭 } private function connectFun(event:Event):void { jText.text+="已经成功连接到服务器!\n"; } private function closeFun(event:Event):void { jText.text+="和服务器断开!\n" } ]]> </mx:Script> <mx:TextArea x="10" y="10" width="327" height="309" id="jText"/> </mx:Application>
界面非常简单啦,其实就是一个TextArea来显示连接的结果而已,运行的结果如下图(注意,服务端也应该在运行!):
在as3.0中,所有和网络通信有关的类都位于flash.net包中,这里使用的是Socket类对象。
==========================================
==我们来详细说明一下上面用到的Socket类:
==========================================
Socket对象的常用创建方法有下面2种:
var socket:Socket=new Socket();//例一
或者
var socket:Socket=new Socket("localhost",719);//例二.这条语句设置了服务器地址为localhost 端口是719
当指定了了服务器地址和端口,Socket对象将自动开始连接服务器。如果不指定,则需要条用connect方法才开始执行连接动作,意思就是,例二的代码和下面的代码是等效的:
var socket:Socket=new Socket(); socket.connect("localhost",719);
完成连接动作后,接下来要获取服务端得返回信息。
Socket对象和URLLOADER啊之类的对象都是一样,利用事件机制来处理服务器端的信息,我们只要给Socket对象添加相关的事件监听函数就可以捕捉到服务器端的信息,Socket对象的事件主要有:
1 Event.CLOSE 连接中断事件。
2 Event.CONNECT 连接状态事件,表示已经成功连接了服务器。
3 IOErrorEvent.IO_ERROR 信息传递错误事件,一般是由服务器地址错误引起的。
4 ProgressEvent.SOCKET_DATA 服务器信息事件,当收到服务器的新信息时被触发。
==========================================
哈哈,经过上面的代码,我们的服务端MM和客户端GG终于通过Socket这个缘分宿命的相遇了!接下来会发生什么?我们继续往下看~~
三、第一封情书(客户端发送消息,服务端接受消息)
客户端GG在遇到服务端MM以后,终日变得茶饭不思,在折磨掉了无数根头发以后,客户端GG终于下定决心,要向服务端MM送出第一封情书啦!
既然是客户端GG送出情书,那我们先来看他到底是怎么做的:
==========================================
==客户端代码:Jclient2.mxml
==========================================
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="12" creationComplete="initApp()"> <mx:Script> <![CDATA[ import flash.net.Socket; import flash.utils.ByteArray; private var socket:Socket=new Socket(); //定义Socket,准备好情书的信封 //初始化程序 internal function initApp():void { socket.connect("localhost",719); //连接服务器 socket.addEventListener(Event.CONNECT,funConnect); //监听是否连接 socket.addEventListener(Event.CLOSE,funClose); //监听连接关闭 } internal function funConnect(event:Event):void { myText.text+="连接已建立 \n"; } internal function funClose(event:Event):void { myText.text+="连接已关闭 \n"; } internal function sendMessage(msg:String):void//发送数据对应按钮click事件 { var message:ByteArray=new ByteArray();//新建一个ByteArray存放数据 message.writeUTFBytes(msg +"\r\n");//写入数据,writeUTFBytes方法,以utf-8格式传数据避免中文乱码 socket.writeBytes(message); //写入Socket的缓冲区 socket.flush(); //调用flush方法发送信息 myText.text+=msg+"\r\n"; //在客户端屏幕上输出发送的内容 myInput.text=""; //清空发言框 } ]]> </mx:Script> <mx:TextArea x="10" y="10" width="703" height="263" id="loveText"/> <mx:TextInput x="10" y="297" width="605" id="loveInput"/> <mx:Button x="648" y="297" label="发送情书" id="sendBtn" click="sendMessage(loveInput.text)"/> </mx:Application>
嘎嘎,情书的做法就上面那面简单,注释已经写得很清楚了,就不多说了。
OK,客户端GG的情书倒是送出去了,我们就来看看服务端MM是怎么接受这封情书的呢?
==========================================
==服务端代码:Jserver2.java
==========================================
import java.net.*; import java.io.*; public class Jserver2{ private BufferedReader reader; //负责输入 private ServerSocket server; //服务器套接字 private Socket socket; //套接字 public Server2(){} //缺省构造函数 void startServer() //启动服务器 { try { server=new ServerSocket(719); //创建服务器套接字 System.out.println("服务器套接字建立完毕"); while(true) { System.out.println("等待客户端GG"); socket=server.accept(); //若客户端GG提出连接请求,与socket连接 System.out.println("完成与客户端的连接"); reader=new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8")); //获取socket输入流,“utf-8”这个编码设置是为了更好显示中文 getMessage();//读取来自客户端的数据,并输出至画面上 } }catch(Exception e) { System.out.println(e); }finally{ try { if(server!=null) server.close();//关闭服务器套接字。 }catch(IOException ie){} } } void getMessage() //读取来自套接字的信息 { try { while(true) //循环 { System.out.println("客户端GG说:"+reader.readLine()); } }catch(Exception e){} finally{ System.out.println("客户端中断连接"); try { if(reader!=null) reader.close(); //关闭套接字的输入流 if(socket!=null) socket.close(); //关闭套接字 reader=null; socket=null; }catch(Exception e){} } } public static void main(String[] args) { Server2 server=new Server2(); server.startServer(); } }哈哈,我们运行来看看,我们的客户端GG的情书能否顺利到达服务端MM的手中呢?
运行结果如下:
HOHO 看样子我们的客户端GG的情书,服务端MM是顺利接受到啦。
四、服务端MM的心思(多客户端通信)
在服务端MM收到客户端GG的情书以后,突然发现自己原来还是蛮受欢迎的呢。但是有句俗话说的好,那就是“不能为了一棵树放弃一片森林”。所以服务端MM就想,能不能多接受几个客户端GG的情书呢?(真TMD贱。。。)
OK,既然服务端MM有了这个需求(虽然是很贱的需求),那我们就要来满足她!
来看服务端的代码:
=========================================
==Jserver3.java
=========================================
import java.net.*; import java.io.*; import java.util.*; public class Jserver3 { private ServerSocket server; List sManager = new ArrayList(); public Jserver3(){} void startServer() //运行服务器 { try { server=new ServerSocket(719); System.out.println("服务器套接字已创建成功!"); while(true) { Socket socket=server.accept(); System.out.println("已经与客户端连接"); new J_Thread(socket).start(); sManager.add(socket); System.out.println("当前客户端连结数:"+sManager.size()); } }catch(Exception e){}finally { try { server.close(); }catch(Exception e){} } } public static void main(String[] args) { Jserver3 server=new Jserver3(); server.startServer(); } class J_Thread extends Thread //与客户端进行通信的线程类 { Socket socket; //套接字引用变量 private DataInputStream reader; //套接字输入流 private DataOutputStream writer; //套接字输出流 J_Thread(Socket socket) //构造函数 { this.socket=socket; } public void run() { try { reader=new DataInputStream(socket.getInputStream());//获取套接字的输入流 writer=new DataOutputStream(socket.getOutputStream());//获取套接字的输出流 String msg; while((msg=reader.readUTF())!=null)//如果收到客户端发来的数据 { //向客户端发送信息 writer.writeUTF("您的情书已经收到"); writer.flush(); System.out.println("来自客户端:"+msg); } }catch(Exception e){}finally { try { sManager.remove(socket); //删除套接字 //关闭输入输出流及套接字 if(reader!=null)reader.close(); if(writer!=null)writer.close(); if(socket!=null)socket.close(); reader=null; writer=null; socket=null; System.out.println("客户端离开");//向屏幕输出相关信息 System.out.println("当前客户端的连接数:"+sManager.size()); }catch(Exception e){} } } } }嘎嘎 在这段代码里,服务端MM为每一个连接的客户端GG分配一个单独的线程,而每一个线程里都持有对应的客户端GG的Socket对象。SO,通过这些多线程,服务端MM就练就了一心N用的功力,可以同时接受N个客户端GG发来的情书了(,真的太贱了。。。。)
客户端的代码和上面的客户端代码一模一样的,这里就不多说啦!
好了,在这里就简单的给大家介绍了如何实现java和flash(flex)实现socket通信的简单功能。有时间的话,再给大家来个简单的聊天室实现(那个时候的服务端MM就更贱了,不仅收着N多客户端GG的情书,竟然还把情书广播给所有的客户端GG,BS!)。嘎嘎 其实原理就是上面所说的这些,大家自己都可以尝试下。
评论
6 楼
cloud21
2010-03-05
我也是刚起步学习Flex。丰富下自己的技术。
一直做UI等是我的弱项,借个机会。
这里很多PAPER都是引过来的。目的仅仅是分享。
一直做UI等是我的弱项,借个机会。
这里很多PAPER都是引过来的。目的仅仅是分享。
5 楼
binlaniua
2010-03-04
..楼主应该知道有个叫BlazeDS的东东吧
4 楼
ccxxcc
2010-03-04
3 楼
cloud21
2010-03-04
大伙都喜欢flex开发吗
2 楼
whaosoft
2010-03-04
还是感觉用ro舒服 lz说呢?
不过要做及时通信的 就只能用socket了
不过要做及时通信的 就只能用socket了
1 楼
HRoger
2010-03-03
写得不错,很有意思,虽然看不见图!
发表评论
-
学习AS3.0全局函数
2011-07-27 20:16 2077使用目的:字符串的编码与解码。 说明:escape()函数会将 ... -
[心得] 把纯文本嵌入as3类中
2011-06-27 11:07 932必须知道文本的编码类型, 否则中文会读出乱码 [Emb ... -
两个翻转BitmapData的函数
2011-06-20 16:57 1846//向右旋转90度 public function scal ... -
http://dl.iteye.com/upload/attachment/435134/b797675d-eb2f-3c7f-8ed0-f612a5813b8
2011-06-20 16:52 1554这东西不太可能只用滤镜来实现,实实在在用程序画出来还差不多 ... -
重写FLEX组件
2011-06-20 16:05 2064一、为什么要重写组件 1、在FLEX已有组件无法满足业务需求, ... -
Flex Builder快捷键大全
2011-06-16 11:38 1927Ctrl + Shift + L :列出所有快捷键 Ctrl ... -
as3三角函数应用
2011-06-11 18:01 2301基本三角函数的计算: 角的正弦值 = 对边 / 斜边 角的余弦 ... -
Flash使用服务器时间
2011-06-07 10:36 1457在做Flash应用时,有时可能会遇到需要使用服务器时间的情况, ... -
分享一个ToolTip类,趋于完美!
2011-06-07 10:26 1328package myas { import ... -
忽略PNG透明区域的事件
2011-06-07 10:24 1944困扰了我好几天,也没人帮我解决..。 最后在网上找到了方法。 ... -
AnimationState
2011-06-03 17:20 1288package engine { impo ... -
Flex中使用三角函数sin() cos()进行圆形排列
2011-05-14 13:16 2383private const CENTRE:Point = ne ... -
Using non-embedded images in a spark BitmapImage
2011-04-18 11:21 1236TiledImage.mxml <?xml vers ... -
在Flash Player 10.2中使用原生鼠标指针
2011-04-01 17:17 2038Adobe Flash Player 10.2 版本引入了一个 ... -
童年の忆
2011-03-21 19:13 1194送给儿时的自己。 -
有时候我们需要将某个数组清空或者说重置
2011-01-27 23:35 1258有时候我们需要将某个数组清空或者说重置,我最常用的办法的是重新 ... -
利用render事件来提高as3程序的运行效率
2011-01-27 23:21 2020AS3中的DisplayObject有一个render事件,他 ... -
解决RemoteClass alias信息丢失
2011-01-17 11:31 1702问题发生场景:flex程序中存在多个module都调用一个 ... -
Flex 4 List控件分页功能的实现
2010-12-23 11:48 2881要想了解Flex 4 List控件的分页功能(paging)的 ... -
Flash 游戏设计笔记:计时器制作
2010-11-12 10:03 1554[img][/img]在游戏当中, ...
相关推荐
Flex与Java Socket通信是Web应用程序开发中的一个重要技术,它允许客户端和服务器之间进行实时、双向的数据交换。在本文中,我们将深入探讨如何实现Flex客户端与Java服务器之间的Socket通信。 首先,确保你拥有以下...
在Flex与Java之间,Socket通信提供了低级别的网络连接,使得前端能够实时地发送和接收数据。 以下是关于Flex与Java Socket通信的一些关键知识点: 1. **Socket API**:Java的Socket类和ServerSocket类是实现TCP/IP...
标题 "FLEX与JAVA通过SOCKET通信" 涉及的是在客户端与服务器之间使用FLEX(Adobe Flex)和JAVA进行Socket通信的技术。Flex是一种开源的、基于MXML和ActionScript的开发框架,用于构建富互联网应用程序(RIA)。Java...
Socket通信是一种低级别的网络通信机制,允许应用程序之间直接建立TCP/IP连接,进行高效的数据传输。 以下是Flex与Java通信的关键知识点: 1. **ActionScript与Java的交互**:在Flex中,通常使用AMF(Action ...
### Flex和Java的Socket通信详解 #### 一、引言 在互联网应用开发中,不同技术栈之间的通信是非常重要的一个环节。本篇文章将详细介绍如何利用...希望本文能够帮助您更好地理解和掌握Flex与Java的Socket通信技术。
### Flex + Java 的 Socket 通信知识点解析 #### 一、概览 在现代软件开发中,前后端分离架构越来越受到青睐。在这种模式下,前端负责用户界面和用户体验,而后端则处理业务逻辑和数据管理。Flex 和 Java 分别作为...
1.背景:Flex Socket通信及安全策略,使用flex实现客户端,java实现服务端; 2.重点解决安全策略问题:将flash发布为html格式后,本地访问页面后,一般可以与服务器进行socket通信;但是部署到tomcat服务器上后无法...
Flex与Java Socket通信是两种不同平台之间进行实时数据交换的一种技术。在本示例中,我们探讨了如何使用Adobe Flex(一种基于ActionScript 3.0的富互联网应用程序框架)作为客户端,通过Socket连接与Java服务器进行...
Flex和java的socket通信 连接 单向通信 多客户通信 一个简单的聊天室
Flex和Java Socket聊天源码是实现在线实时通信的一种技术结合,主要涉及的技术点包括Flex前端开发、Java后端Socket编程以及图文混排和表情支持。下面将详细解释这些知识点。 1. Flex:Flex是由Adobe公司开发的一套...
Flex Socket通信是Adobe Flex应用程序与Java应用程序之间进行低级网络通信的一种方式。Flex是一种基于ActionScript的开源框架,主要用于创建富互联网应用(RIA),而Java则是一种广泛使用的多平台编程语言,尤其在...
Flex Java Socket文字聊天是一种基于Adobe Flex前端技术和Java后端Socket通信技术实现的实时文本聊天应用。这个应用允许用户通过网络进行双向通信,提供了一个简单但功能完备的平台,让用户能够发送和接收即时消息。...
在实现Flex与Socket通信时,开发者需要注意错误处理,例如网络中断、服务器崩溃等情况。同时,为了保护用户隐私和数据安全,还需要考虑加密传输和身份验证机制。此外,性能优化也是重要的一环,例如通过缓存和批量...
Flex与Java之间的通信是开发跨平台应用程序时的关键技术,它允许客户端(通常为Flex应用程序)与服务器端(通常是Java应用程序)进行数据交换。本篇将深入探讨几种主要的通信方式:URLLoader,HTTPService和Socket。...
在本文中,我们将深入探讨Flex AS3与Java的Socket通信技术,这是一种允许Web应用程序(如Flash游戏)与服务器进行低级数据传输的方法。Flex AS3是Adobe开发的ActionScript 3.0编程语言的一个框架,它提供了丰富的...
- BlazeDS或LiveCycle Data Services:Adobe提供的中间件,允许Flex应用程序与Java或.NET服务进行数据交换,包括Socket通信。 2. **C#服务端开发**: - `System.Net.Sockets.Socket`类:用于创建和管理Socket连接...
7. **学习与实践**:对于初学者,分析和运行这个项目可以帮助理解Flex和Java之间的通信机制,以及如何利用Socket实现实时数据交换。同时,也可以了解到如何在Eclipse中管理和部署这样的项目。 总之,Flex+Java+...
Socket通信是一种底层网络通信方式,允许Flex和Java之间建立直接的双向通信通道。在Flex中,我们可以使用Flash Player的Socket类来创建socket连接,而在Java中,通常会用到ServerSocket和Socket类来监听和接受连接...