Mina和swf文件通信。
来源:互联网 发布:mtcnn tensorflow 编辑:程序博客网 时间:2024/06/05 22:29
本文介绍使用java的Mina框架,来编写socket服务器,以及和swf文件直接进行socket连接。
需要用到mina2.0的jar包 大家自己去找吧。
废话不说,直接先上服务端代码:
main.java
import java.io.IOException;import com.game.action.StartGameHandler;import com.game.server.TcpServer;import com.game.service.InitGameService;public class main {public static void main(String[] string) throws Exception {new StartGameHandler();InitGameService.getService().init();//初始化信息TcpServer tcpServer = new TcpServer();tcpServer.serverStart();tcpServer.securityStart();}}
ServerHandler .java
import org.apache.mina.common.IdleStatus;import org.apache.mina.common.IoAcceptor;import org.apache.mina.common.IoHandler;import org.apache.mina.common.IoSession;public class ServerHandler implements IoHandler{private IoAcceptor acceptor;private static ServerHandler handler = new ServerHandler();public static ServerHandler getInstance() {if(handler == null){handler = new ServerHandler();}return handler;}@Overridepublic void messageReceived(IoSession session, Object message) throws Exception {//在此地接收信息。}@Overridepublic void messageSent(IoSession session, Object message) throws Exception {// TODO Auto-generated method stub}@Overridepublic void sessionClosed(IoSession session) throws Exception {System.out.println("联机关闭"); return;}@Overridepublic void sessionCreated(IoSession session) throws Exception {System.out.println("联机创建了"); }@Overridepublic void sessionIdle(IoSession arg0, IdleStatus arg1) throws Exception {// TODO Auto-generated method stubSystem.out.println("用户连接了"); }@Overridepublic void sessionOpened(IoSession session) throws Exception {// TODO Auto-generated method stubreturn;}public IoAcceptor getAcceptor() {return this.acceptor;}public void setAcceptor(IoAcceptor acceptor) {this.acceptor = acceptor;}@Overridepublic void exceptionCaught(IoSession session, Throwable cause)throws Exception {System.out.println("出错了"); cause.printStackTrace(); }}
TcpServer.java
package com.game.server;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.charset.Charset;import org.apache.mina.common.IoAcceptor;import org.apache.mina.filter.codec.ProtocolCodecFilter;import org.apache.mina.filter.codec.textline.LineDelimiter;import org.apache.mina.filter.codec.textline.TextLineCodecFactory;import org.apache.mina.filter.logging.LoggingFilter;import org.apache.mina.transport.socket.nio.NioSocketAcceptor;import com.game.action.GameHandler;public class TcpServer {public void serverStart(){IoAcceptor acceptor = new NioSocketAcceptor(); acceptor.getSessionConfig().setReadBufferSize(1024000);acceptor.getFilterChain().addLast( "logger", new LoggingFilter()); acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ),LineDelimiter.NUL,LineDelimiter.NUL))); GameHandler handler =GameHandler.getInstance();acceptor.setHandler(handler);try {acceptor.bind(new InetSocketAddress(6060));System.out.println("TCP端口绑定: "+6060);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("TCP服务监听开始...... ");}public void securityStart(){IoAcceptor acceptor = new NioSocketAcceptor(); acceptor.getSessionConfig().setReadBufferSize(1024000);acceptor.getFilterChain().addLast( "logger", new LoggingFilter()); acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ),LineDelimiter.NUL,LineDelimiter.NUL))); SecurityHandler handler =SecurityHandler.getInstance();acceptor.setHandler(handler);try {acceptor.bind(new InetSocketAddress(843));System.out.println("TCP端口绑定: "+843);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("TCP服务监听开始...... ");}}
安全策略端口监听:
SecurityHandler .java
import java.util.List;import org.apache.mina.common.IdleStatus;import org.apache.mina.common.IoAcceptor;import org.apache.mina.common.IoHandler;import org.apache.mina.common.IoSession;public class SecurityHandler implements IoHandler{private IoAcceptor acceptor;private String securityWords = "<policy-file-request/>";private final String securityXml = "<?xml version='1.0'?>" + "<cross-domain-policy>" + "<allow-access-from domain='*' to-ports='*'/>" + "</cross-domain-policy>";private static SecurityHandler handler = new SecurityHandler();public static SecurityHandler getInstance() {if(handler == null){handler = new SecurityHandler();}return handler;}@Overridepublic void messageReceived(IoSession session, Object message) throws Exception {System.out.println("843:"+message);session.write(securityXml+ "\0");}@Overridepublic void messageSent(IoSession session, Object message) throws Exception {// TODO Auto-generated method stub}@Overridepublic void sessionClosed(IoSession session) throws Exception {return;}@Overridepublic void sessionCreated(IoSession session) throws Exception {System.out.println("联机创建了"); }@Overridepublic void sessionIdle(IoSession arg0, IdleStatus arg1) throws Exception {// TODO Auto-generated method stubSystem.out.println("用户连接了"); }@Overridepublic void sessionOpened(IoSession session) throws Exception {// TODO Auto-generated method stubreturn;}public IoAcceptor getAcceptor() {return this.acceptor;}public void setAcceptor(IoAcceptor acceptor) {this.acceptor = acceptor;}@Overridepublic void exceptionCaught(IoSession session, Throwable cause)throws Exception {System.out.println("出错了"); cause.printStackTrace(); }}
客户端代码:
package { import flash.display.MovieClip; import flash.events.*; import flash.net.Socket; import flash.net.XMLSocket; import flash.system.Security; import flash.system.SecurityDomain; public class SocketClient { private var socket:Socket; private var xmlSocket:XMLSocket = new XMLSocket(); private var connect:Boolean = false; private var _obj:Object = this; private static var client:SocketClient = null; //private var ip:String = "192.168.1.101"; private var ip:String = "127.0.0.1"; private var surityStr = "xmlsocket://"+ip+":843"; private var port:int = 6060; public function SocketClient() { initApp(); } /**单例模式**/ public static function getInstance():SocketClient{ if(client==null) { client = new SocketClient(); } return client; } private function initApp():void{ if(!xmlSocket.connected) { initXMLSocket(); } } private function initXMLSocket() { Security.loadPolicyFile(surityStr); xmlSocket.connect(ip,port); xmlSocket.addEventListener(Event.CONNECT,connectionFun); xmlSocket.addEventListener(Event.CLOSE,closeFun); } public function setBackFunction(fun:Function){ xmlSocket.addEventListener(DataEvent.DATA,fun); } private function connectionFun(event:Event):void{ trace("已经成功连接到服务器\n"); } /** **设置回调方法 ***/ private function closeFun(event:Event):void{ trace("已经断开服务器\n"); client = null; } public function receiveMsg(event:DataEvent):void{ trace("接收到消息"+event.data); } public function removeListener(fun:Function) { xmlSocket.removeEventListener(DataEvent.DATA ,fun); } /** *向服务端发送 xml 数据 ***/ public function sendXml(xml:String):void{ try{ xmlSocket.send(xml.toString()); }catch(e:Error){ client = null; } } }}
实例化这个类之后,直接调用 sendXml("参数") 这个方法,即可发送socket消息。
Security.loadPolicyFile(surityStr);//这个是策略信息。
向843端口发送信息后,843端口返回策略信息,即能完成socket连接。
如果没有策略信息,是可以连接到6060端口,但是连接后,马上会断掉,所以无法进行socket通信。
注意:发布的时候,flash cs 要在发布配置里面 配置好“只访问网络”。
如果发布配置不设置好,前面的代码我测试是无法通过的。本地测试OK。只打开swf文件就无法正常通信。这点我折腾了很久。
- Mina和swf文件通信。
- swf文件通信
- swf文件间通信
- FLEX和嵌入其中的SWF文件的通信
- SWC和SWF文件比较
- SWC和SWF文件比较 .
- FLEX与加载其中的SWF文件通信
- FlexPaper显示swf文件示例和参数设置
- mina 框架java服务端的搭建和通信
- mina 框架java服务端的搭建和通信。
- mina 框架java服务端的搭建和通信。
- mina 框架java服务端的搭建和通信。
- 仅限于文件系统的 SWF 文件和仅限于网络的 SWF 文件不能彼此加载
- 由mina通信想到
- Apache Mina 网络通信
- Apache Mina 网络通信
- Apache Mina 网络通信
- Apache Mina 网络通信
- NYOJ--408题Board Game Dice
- Android 3D系列之纹理篇
- oracle 账户锁定解除
- Java开源工作流比较
- 详解Android解析Xml的三种方式——DOM、SAX以及XMLpull
- Mina和swf文件通信。
- 上司与下属相处的东方大智慧
- 2012,我要继续自己的2011的打算,完成太多的2011留下的遗憾
- 高通Android平台下关于display部分的几个关键问题
- 进制之间的相互转化
- Java中的synchronized总结
- 2011年第四季度,DDR3最新进展,尔必达出品,25nm工艺,单颗粒最大512MB!
- Java开源工作流比较-2
- 丢番图与麦乐鸡购买问题