- 浏览: 309488 次
- 性别:
- 来自: 南昌
文章分类
最新评论
-
秋风扫落叶:
不错,学习了。shadow文件中记录的格式是什么?
/etc/passwd & /etc/shadow 详解 -
key232323:
重拾jstl——写得很好。我收藏下。
JSTL标签用法 -
zxl10059:
不错,非常简明扼要
Hibernate分页 -
Batmankwok:
很好,所见略同,
自定义组件MXML和as两种实现的方式和区别 -
Dxx23:
摘话回帖!
通过response对象的sendRedirec ...
response.sendRedirect方式的转向与RequestDispatcher的forward方法的比较
一、准备:
服务端: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!)。嘎嘎 其实原理就是上面所说的这些,大家自己都可以尝试下。
发表评论
-
web.xml tomcat 和jetty 区别
2010-09-07 09:31 2189因为使用GWT,所以测试的时候是在jetty上运行的,但是最后 ... -
单元测试之实践四 Action的测试
2010-08-30 10:14 874Action的测试是比较辛苦的。因为它依赖与其他的环境(比如t ... -
单元测试之实践三 Service的测试
2010-08-30 10:13 995测试Service,因为Service依赖的Dao, 所以只需 ... -
单元测试之实践二,关于DAO的测试
2010-08-30 10:12 972前阵子发表过 我的第一个真正意义上的测试 。里面对于测试S ... -
Mockito特点
2010-08-30 10:02 11111. 只能使用jdk1.5以上,因为它的方便是用jdk1.5的 ... -
HttpUnit进行Web测试
2010-08-30 00:06 1714简介:HttpUnit是基于JUnit ... -
关于单元测试的一些看法
2010-08-28 14:26 928从参加工作以来,参加 ... -
Eclipse IDE下 Cactus + Jetty 对 Servlet 的测试
2010-08-28 13:09 1576在开发J2EE Web项目时,测试过程常涉及到代码与Web C ... -
用cactus,jetty实现对servlet类进行单元测试三(完)
2010-08-28 11:39 1134OK,可以开始写测试类了,代码为: pa ... -
用cactus,jetty实现对servlet类进行单元测试二
2010-08-28 11:37 1380按照官网的定义,我们就可以用MILY: 'Arial','sa ... -
用cactus,jetty实现对servlet类进行单元测试一
2010-08-28 11:35 1409JUnit是名声大燥了,想必只要学过JAVA的人都知道世上有个 ... -
相关测试工具下载
2010-08-26 17:21 1471相关测试工具下载 HP-Mercury软件测试工具下载,随时 ... -
单元测试实践小结
2010-08-26 16:40 634在系统开发过程种使用单元测试,会带来很多的的好处,最明显为: ... -
软件测试杂录
2010-08-26 14:41 1118比较杂,有空再整理一 ... -
J2EE单元测试
2010-08-26 11:06 1080一、测试原则 Java ... -
利用httpunit测试servlet
2010-08-26 10:33 2037传统的Java WEB应用中,核心技术莫过于Servlet类与 ... -
使用 EasyMock 更轻松地进行测试
2010-08-25 14:40 1015测试驱动开发是软件开发的重要部分。如果代码不进行测试,就是不可 ... -
Cactus工作原理
2010-08-24 09:52 1019Cactus 是Jakarta的子项目 ... -
Cactus实例讲解
2010-08-23 17:08 931Cactus简介 . 简介 Cactus实现了对JUni ... -
Flash 聊天室
2010-08-17 11:39 1008今天我们来制作 Flash 聊天室,学习使用 Socket 类 ...
相关推荐
【Flex和Java通信】是指在Flex前端应用与Java后端服务之间进行数据交换的技术。本文主要介绍如何使用LCDS(LiveCycle Data Services)作为中间件,实现Flex与Java的高效集成。 **一、Flex和LCDS简介** 1. **Flex**...
Flex与Java通信是Web开发中的一个重要领域,它允许前端用户界面(UI)通过富互联网应用程序(RIA)与后端服务器进行交互。Flex是Adobe开发的一种用于构建动态、交互性强的Web应用的开源框架,主要基于ActionScript...
Flex和Java通信是一种常见的技术需求,特别是在构建富互联网应用程序(RIA)时,前端的Flex界面与后端的Java服务需要紧密交互。BlazeDS是Adobe公司推出的一个开源项目,专门用于实现Flex和Java之间的数据通信,它...
### Flex和Java通信之 HelloWorld 实现详解 #### 一、背景与目的 随着现代Web应用对用户体验和交互性的要求不断提高,选择合适的技术栈至关重要。在众多前端技术中,Flex 因其丰富的图形处理能力和良好的跨平台...
#### 四、使用BlazeDS进行Flex与Java通信 完成上述步骤后,就可以开始使用BlazeDS进行Flex与Java之间的通信了。具体的通信流程包括: 1. **定义服务接口**:在Java中定义一个服务接口,该接口将被Flex应用程序调用...
blazeDS是FLEX和Java通信的信息机制的消息处理机制
这个“flex与java通信的完整demo”提供了一个完整的示例,展示了如何在Flex前端和Java后端之间实现有效的通信。 首先,Flex是Adobe开发的开源框架,用于创建交互式、高性能的RIA。它基于ActionScript编程语言,使用...
最简单的BlazeDS实现flex与java通信..无积分下载...最简单的BlazeDS实现flex与java通信..无积分下载...最简单的BlazeDS实现flex与java通信..无积分下载...最简单的BlazeDS实现flex与java通信..无积分下载...最简单的...
首先,让我们了解一下Flex和Java通信的基本原理。 Flex是一款基于ActionScript 3的开源框架,用于创建富互联网应用程序(RIA)。HTTPService组件是Flex提供的一个用于与远程服务器进行HTTP通信的工具,它支持SOAP、...
综上所述,"Flex与Java通信源码"涉及到的技术点主要包括Flex和Java的结合使用,AMF协议,BlazeDS中间件,以及客户端与服务器的通信流程。理解并掌握这些知识点,对于开发富互联网应用至关重要。
文件中的内容描述了一个使用Myeclipse...通过以上步骤,开发者可以在Myeclipse环境中创建一个能够处理Flex和Java通信的Web项目,实现富客户端应用的数据交互。这对于构建交互性强、用户体验好的Web应用具有重要意义。
标题"flex 和 java交互"指出了一个关键的技术融合,即Flex与Java的整合,允许Flex前端与Java后端进行数据和功能的通信。这种交互通常是通过AMF(Action Message Format)协议实现的,它提供了一种高效的数据序列化...
Flex与Java通信是一种常见的技术,用于构建富互联网应用程序(RIA)。在这种架构中,Flex作为前端用户界面,而Java作为后端服务器提供业务逻辑和数据处理。以下是对标题、描述和标签所涉及知识点的详细说明: 1. **...
5. **Flash Remoting**:虽然不是Flex3与Java通信的首选方式,但Flash Remoting(通过NetConnection和NetStream类)仍然可用于与服务器端进行实时数据交换,不过它通常用于Flash Player而不是Flex。 6. **Security*...
9. **flexweb项目**:根据提供的压缩包文件名,`flexweb`可能是一个包含Flex和Java通信示例的项目。该项目可能包含Flex源代码、Java服务代码以及相关的配置文件,供开发者参考学习。 总之,Flex与Java之间的通讯...