`
yaoweinan
  • 浏览: 137519 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

flex3 socket+java

 
阅读更多

首先解决的问题是flex的沙箱问题,由于flex 连接服务器存在此问题总是会连接两次服务,首先贴出as文件

package as3.email
{
	import flash.errors.IOError;
	import flash.events.Event;
	import flash.events.IOErrorEvent;
	import flash.events.ProgressEvent;
	import flash.events.SecurityErrorEvent;
	import flash.net.Socket;
	
	import mx.controls.Alert;
	public class EmailReceiveSocket extends Socket {
	private var receiveHandler:Function;
	private var closedHandler:Function;
    public function EmailReceiveSocket() {
        super();
        configureListeners();
        
    }
	public  function connectServer(host:String,port:int,token:String,connectHandler:Function,receiveHandler:Function,closedHandler:Function):void{
		super.addEventListener(Event.CONNECT, connectHandler);
		
		this.closedHandler=closeHandler;
		this.receiveHandler=receiveHandler;
		if (host && port)  {
            super.connect(host, port);
        }
	}
    private function configureListeners():void {
    	addEventListener(Event.CLOSE, closeHandler);
        addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
        addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
        addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
    }

    public function writeln(str:String):void {
       	str += "\n";
        try {
            super.writeUTF(str);
            super.flush();
        }
        catch(e:IOError) {
           Alert.show(e.message);
        }
    }


    private function readResponse():void {
         while(super.bytesAvailable)
        {
            this.receiveHandler(super.readMultiByte(super.bytesAvailable,"utf8"));
         }
    }

    private function closeHandler(event:Event):void {
        this.closedHandler();
    }
    private function ioErrorHandler(event:IOErrorEvent):void {
         Alert.show("ioErrorHandler: " + event);
    }

    private function securityErrorHandler(event:SecurityErrorEvent):void {
         Alert.show("securityErrorHandler: " + event);
    }

    private function socketDataHandler(event:ProgressEvent):void {
         readResponse();
    }
 }
}

 调用

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init(event)">
	<mx:states>
		<mx:State name="login_success" id="login_success">
			<mx:RemoveChild target="{login}"/>
			<mx:AddChild position="lastChild">
				<mx:Label x="116" y="9" width="682" id="msg"/>
			</mx:AddChild>
			<mx:AddChild position="lastChild">
				<mx:Button x="88" y="8" width="20" height="20" label="连接状态" fillColors="[red, red]"  cornerRadius="30" id="cur_state"/>
			</mx:AddChild>
			<mx:AddChild position="lastChild">
				<mx:DataGrid x="10" y="35" width="710" height="405" id="grid">
					<mx:columns>
						<mx:DataGridColumn headerText="编号" dataField="id" width="50" textAlign="center"/>
						<mx:DataGridColumn headerText="标题" dataField="text"/>
					</mx:columns>
				</mx:DataGrid>
			</mx:AddChild>
			<mx:AddChild position="lastChild">
				<mx:Button x="10" y="8" label="连接服务" click="connect(event)" id="conn"/>
			</mx:AddChild>
			<mx:AddChild position="lastChild">
				<mx:Button x="752" y="418" label="发送" click="send(event)"/>
			</mx:AddChild>
			<mx:AddChild position="lastChild">
				<mx:TextInput x="726" y="366" id="context"/>
			</mx:AddChild>
		</mx:State>
	</mx:states>
<mx:Style source="css/email.css"></mx:Style>
	<mx:Panel width="327" height="238" layout="absolute" titleStyleName="loginPanelTitle" title="邮箱登录" id="login" right="60" verticalCenter="20" styleName="loginPanel">
		<mx:Button x="125.5" y="141" label="login" click="loginAction(event)"/>
		<mx:Button x="194.5" y="140" label="reset"/>
		<mx:ComboBox x="91.5" y="30" editable="false" id="service_select" render="service_select_render(data)" width="180"></mx:ComboBox>
		<mx:TextInput id="username" x="91.5" y="61" width="180" focusIn="clearStyles(event)"/>
		<mx:TextInput id="password" x="91.5" y="91" displayAsPassword="true" width="180" focusIn="clearStyles(event)"/>
		<mx:Text x="27.5" y="33" text="邮箱类型"/>
		<mx:Text x="47.5" y="63" text="账号"/>
		<mx:Text x="47.5" y="93" text="密码"/>
	</mx:Panel>
	<mx:Script>
		<![CDATA[
			import flash.utils.setInterval;
			import as3.email.EmailReceiveSocket;
			import mx.rpc.AsyncToken;
			import mx.rpc.events.ResultEvent;
			import mx.core.UITextField;
			import com.google.maps.Color;
			import com.adobe.serialization.json.JSON;
			import mx.controls.Alert;
			import mx.collections.ArrayCollection;
			import mx.rpc.http.mxml.HTTPService;
			private var httpServer:HTTPService=new HTTPService();
			private  var userconfig:Object;
			private var socket:EmailReceiveSocket=new EmailReceiveSocket();
			private var dataArr:ArrayCollection=new ArrayCollection();
			private var i:int=1;
			private function init(evet):void{
				var flexRequest:URLRequest=new URLRequest("../email/listRemoteService.do");
				var flexload:URLLoader=new URLLoader();
				flexload.load(flexRequest);
				flexload.addEventListener(Event.COMPLETE, function(e:Event):void{
					var result=JSON.decode(e.target.data.toString(),true);
					if(result.success){
						var data:Array=result.data;
						for each(var d:Object in data){
							d.label=d.name;	
						}
						service_select.dataProvider=data;
					}else{
					}
				});
			}
			private function service_select_render(data:Object):String{
				return data.name;
			}
			private function loginAction(e):void{
				if(username.text.length==0){
					username.setStyle("borderColor",Color.RED);
					return;
				}
				if(password.text.length==0){
					password.setStyle("borderColor",Color.RED);
					return;
				}
				httpServer.method="POST";
				httpServer.url="../system/user/login.do";
				var params:Object={};
				params.username=username.text;
				params.password=username.text;
				params.pop3=service_select.selectedItem.pop3;
				params.smtp=service_select.selectedItem.smtp;
				httpServer.addEventListener(ResultEvent.RESULT,loginResult);
				httpServer.send(params);
			}
			private function loginResult(e:ResultEvent):void{
				var rst=JSON.decode(e.result.toString(),true);
				if(rst.success){
					userconfig=rst.data;
					this.currentState="login_success";
				}else{
					Alert.show(rst.result_msg);
				}
			};
			private function clearStyles(event:Event):void{
				event.currentTarget.setStyle("borderColor",Color.GRAY9);
			}
			private function send(e:Event):void{
				var message:ByteArray=new ByteArray();
				message.writeUTFBytes(this.context.text +"\n");
				socket.writeBytes(message);
				socket.flush();
			}
			private function connect(e:Event):void{
				socket.connectServer("192.168.1.254",2567,"",connectHandler,receiveHandler,closedHandler);
			}
			private function receiveHandler(data:Object):void{
				var obj:Object=new Object();
				obj.id=i+"";
				obj.text=data.toString();
				dataArr.addItem(obj);
				i++;
			}
			private function closedHandler():void{
				this.cur_state.setStyle("fillColors",[Color.RED]);
				this.conn.enabled=true;
			}
			private function connectHandler(event:Event):void {
	    		this.conn.enabled=false;
	    		this.cur_state.setStyle("fillColors",[Color.GREEN]);
	    		socket.writeln("hello");
	    		socket.flush();
	    		socket.writeln("hello");
	    		socket.flush();
	    		var message:ByteArray=new ByteArray();
				message.writeUTFBytes("start" +"\n");
				socket.writeBytes(message);
				socket.flush();
				grid.dataProvider=dataArr;
	   		}
		]]>
	</mx:Script>
</mx:Application>

 在java服务端做出如下处理:

package com.lyon.yao.CMessage.email.service.impl;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.util.HashMap;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.lyon.yao.CMessage.email.entry.EmailUser;
import com.lyon.yao.CMessage.email.service.IEMailBasicCongfigService;
import com.lyon.yao.CMessage.email.service.ISocketService;
import com.sun.xml.internal.messaging.saaj.util.ByteInputStream;

/**
 * @author lyon.yao
 * @date Dec 23, 2011
 * @function 邮件socket 服务器  实现 
 */
@Service
public class SocketServiceImpl implements ISocketService, Runnable{
	@Autowired
	private IEMailBasicCongfigService config;
	private ServerSocket serverSocket=null;
	public static HashMap<String,EmailUser> users=new HashMap<String, EmailUser>(0);
	private Thread service=new Thread(this);
	private String xml;   
	public SocketServiceImpl() {
		super();
		xml="<?xml version=\"1.0\"?>" +    
		"<!DOCTYPE cross-domain-policy SYSTEM \"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd\">" +    
		"<cross-domain-policy>" +    
		"<allow-access-from domain=\"*\" to-ports=\"*\" />" +    
		"</cross-domain-policy>";  
		// TODO Auto-generated constructor stub
	}

	public void start() throws Exception {
		// TODO Auto-generated method stub
		try {
			serverSocket=new ServerSocket(config.getServicesConfig().getPort());
			service.start();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void stop() throws Exception {
		// TODO Auto-generated method stub
		service.stop();
	}

	@Override
	protected void finalize() throws Throwable {
		// TODO Auto-generated method stub
		if(!serverSocket.isClosed()){
			serverSocket.close();
		}
		super.finalize();
	}

	public void run() {
		// TODO Auto-generated method stub
		while(true){
			try {
			 Socket socket=	serverSocket.accept();
			 System.out.println("连接成功```````");    
			 BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));   
			 PrintWriter pw=new PrintWriter(socket.getOutputStream());    
			 char[] by=new char[22];    
			 br.read(by,0,22); 
			 String head=new String(by);
			 if(head.equals("<policy-file-request/>")){    
			     pw.write(xml+"\0");    
			     pw.flush(); 
			     pw.close();
			     br.close();
			     socket.close();
			 }else{
				 InnerReaderThread inner=new InnerReaderThread(socket);
				 inner.start();
			 }
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	class InnerWriterThread extends Thread{
		OutputStream out=null;
		Socket socket=null;
		InnerWriterThread(Socket socket){
			this.socket=socket;
			try {
				out=socket.getOutputStream();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		public void run() {
			while(true){
				try {
					if(!socket.isClosed()){
						out.write("你好".getBytes());
						out.flush();
					}else{
						break;
					}
					Thread.currentThread().sleep(10000);
				} catch (SocketException e) {
					// TODO: handle exception
					e.printStackTrace();
					if(!socket.isClosed()){
						try {
							socket.close();
							System.out.println("socket closed");
						} catch (IOException e1) {
							e1.printStackTrace();
						}
					}
					break;
				}catch (InterruptedException e) {
					// TODO: handle exception
					e.printStackTrace();
				}catch(IOException e){
					
				}
			}
			
		}
	}
	class InnerReaderThread extends Thread{
		Socket socket=null;
		InputStream input=null;
		
		@Override
		public void run() {
			// TODO Auto-generated method stub
			try {
				BufferedReader reader=new BufferedReader(new InputStreamReader(input,"UTF-8"));
				String line=null;
				InnerWriterThread out=new InnerWriterThread(socket);
				out.start();
				while((line=reader.readLine())!=null){
					System.out.println(line);
					if(line.equals("exit")){
						if(!socket.isClosed()){
							socket.close();
						}
					}
				}
			} 
			catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		public InnerReaderThread(Socket socket) {
			super();
			// TODO Auto-generated constructor stub
			this.socket=socket;
			try {
				input=socket.getInputStream();
				
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		protected void setSocket(Socket socket){
			this.socket=socket;
		}
	}
}

 该类中含有两内部类用来发送和接收数据。

就这么多了,运行如图



 
  • 大小: 7.2 KB
  • 大小: 14.2 KB
分享到:
评论

相关推荐

    Flex+Java+Socket 实例源码 聊天室

    Flex+Java+Socket 实例源码聊天室是一个典型的网络通信应用,它结合了Adobe Flex作为前端用户界面技术,Java作为后端服务器处理技术,并利用Socket进行实时的数据传输。这个项目对于学习和理解客户端与服务器之间的...

    flex+java+tomcat实现socket通信及安全策略

    1.背景:Flex Socket通信及安全策略,使用flex实现客户端,java实现服务端; 2.重点解决安全策略问题:将flash发布为html格式后,本地访问页面后,一般可以与服务器进行socket通信;但是部署到tomcat服务器上后无法...

    FLEX+Delphi,FLEX+Java,FLEX+C# 的聊天室

    设置服务端IP和端口 &lt;br&gt;----------------------------- chat 客户端代码 FLEX3 开发 ChatServer Delphi6 开发的服务端 Server java 开发的服务端 WindowsApplication1 C# 开发的服务端 &lt;br&gt;...

    flex+java的socket通信

    ### Flex + Java 的 Socket 通信知识点解析 #### 一、概览 在现代软件开发中,前后端分离架构越来越受到青睐。在这种模式下,前端负责用户界面和用户体验,而后端则处理业务逻辑和数据管理。Flex 和 Java 分别作为...

    JsSocket,JS+FLEX+JAVA模拟的Js Soclet

    JsSocket 是使用js + flex + java开发的一套基于web的socket通信组件 主要解决大家在开发web项目时需要用到前台与后台时时通信时的问题,除了HTML5的WebSocket之外,之前大家使用的方法一般为:1、页面间断刷新;2、...

    flex+java(socket)聊天室

    本系统采用java+flex(socket)连接实现的聊天室功能 可以实现私聊、群聊、时时统计在线聊天人数!同时本系统为视频直播预留了接口方便实现视频和语音的同步直播功能!本系统注释详细!方便大家日后的学习!

    flex java socket 文字聊天

    在"flex(as3)+java(socket)文字聊天"的项目中,主要涉及以下几个关键知识点: 1. **Flex AS3编程**:使用ActionScript 3编写客户端代码,创建UI组件如文本输入框、文本显示区域和按钮,以及Socket对象用于网络通信...

    基于flex4+java的聊天通信程序

    3. **聊天通信协议**:在Flex4客户端与Java服务器之间,需要定义一套通信协议,以便正确地交换数据。这可能包括消息格式(JSON或XML)、心跳机制以保持连接活跃、错误处理策略等。例如,客户端发送的消息可能包含...

    flex的socket客户端连接java多线程socket服务端demo

    本示例探讨了如何使用Adobe Flex作为客户端,通过Socket接口与Java实现的多线程Socket服务端进行通信。以下是对这个主题的详细解释: 首先,Flex是一种开放源代码的富互联网应用程序(RIA)开发框架,它允许开发者...

    java+flex基于socket的聊天案例

    在这个“java+flex基于socket的聊天案例”中,我们将深入探讨如何利用Java作为服务器端技术,Flex作为客户端展示层,通过Socket通信实现一个简单的聊天应用程序。 Java在后台处理业务逻辑和网络通信,它提供了...

    Flex+Java开发拓扑图

    在这个项目中,Java可能用于生成拓扑数据,如设备信息、连接关系等,并通过HTTP服务或者Web Socket等通信协议将数据传输到Flex前端。Java的强类型和面向对象特性使得它能很好地处理复杂的数据结构和业务逻辑。 在...

    JSP+Flex+javaSocket+jquery+ajax聊天

    【JSP+Flex+JavaSocket+jQuery+Ajax聊天】是一个技术综合的应用实例,它整合了多种前端和后端技术,为用户提供类似QQ的聊天体验。下面将分别介绍这些技术及其在聊天应用中的作用。 **JSP(JavaServer Pages)**是...

    Flex+java上传开发工具包

    Flex+Java上传开发工具包是用于构建Web应用中文件上传功能的一种技术组合。在这个工具包中,主要包括两个关键的库文件:comm-fileupload1.2.jar和comm-io.jar。这两个库文件分别扮演着不同的角色,共同协作以实现...

    基于java+flex实现的聊天程序

    《基于Java+Flex实现的聊天程序详解》 在信息技术领域,构建实时的在线聊天系统是一项常见的挑战。本项目“基于Java+Flex实现的聊天程序”提供了一种有效的解决方案,它结合了Java的强大后端处理能力和Flex的富...

    socket+AMF3

    在Java、Python、C++等语言中,都有对应的socket API供开发者使用。 然后,AMF3是Adobe Flex和ActionScript 3.0中的数据序列化标准。它比早期的AMF0更高效,能够快速地编码和解码复杂的数据结构,如对象、数组、...

    网络游戏五子棋源码flex|+java

    2. **Java网络编程**:了解Socket编程,学习如何建立服务器与客户端之间的连接,实现数据的可靠传输,以及处理并发连接。 3. **游戏逻辑实现**:五子棋的胜负判断,连珠规则,以及如何防止非法操作。这些逻辑通常在...

    Flex + java 推送技术示例

    Flex可以通过使用第三方库如Socket.IO或Flash WebSocket API与Java后台建立WebSocket连接,实现数据的实时推送。 2. **Flex推送技术实现** - **Polling(轮询)**:简单轮询是最基础的推送实现,客户端定时向...

    Flex与Java Socket通信

    Flex与Java Socket通信是Web应用程序开发中的一个重要技术,它允许客户端和服务器之间进行实时、双向的数据交换。在本文中,我们将深入探讨如何实现Flex客户端与Java服务器之间的Socket通信。 首先,确保你拥有以下...

    flex Socket 通信

    Flex Socket通信是Adobe Flex应用程序与Java应用程序之间进行低级网络通信的一种方式。Flex是一种基于ActionScript的开源框架,主要用于创建富互联网应用(RIA),而Java则是一种广泛使用的多平台编程语言,尤其在...

    flex与java采用socket方式通信

    标题中的“flex与java采用socket方式通信”是指在开发分布式应用程序时,使用Adobe Flex作为前端UI框架,通过Socket协议与Java后端服务器进行数据交互的一种技术实现。Flex是一款基于ActionScript的开源框架,用于...

Global site tag (gtag.js) - Google Analytics