首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Flash >

[转] flash socket与php socket通讯的例子

2012-12-19 
[转] flash socket与php socket通信的例子http://bbs.9ria.com/viewthread.php?tid76152&extrapage%3D1%

[转] flash socket与php socket通信的例子
http://bbs.9ria.com/viewthread.php?tid=76152&extra=page%3D1%26amp%3Borderby%3Ddateline%26amp%3Bfilter%3D2592000

使用说明:
1:把socket这个文件夹复制到硬盘,比如盘符是d:\
2:找到socket\php下面的start.bat,右键--编辑---修改盘符(这里默认地址是d:\)
3:把socket文件夹下的xx.cfg复制到C:\Documents and Settings\hui.wang\Application Data\Macromedia\Flash Player\#Security\FlashPlayerTrust下。
4:双击php\socket下的start.bat,运行服务端。可以查看服务端运行状况。
5:双击flash\load.swf运行,点击舞台,可以收到服务端数据。
6:Server.php里已经默认发送crossdomain.xml字符,防止安全沙箱冲突。
flash  代码:

package{        import flash.display.Sprite;        import flash.events.Event;        import flash.events.IOErrorEvent;        import flash.events.MouseEvent;        import flash.events.ProgressEvent;        import flash.events.SecurityErrorEvent;        import flash.net.Socket;        import flash.net.URLLoader;        import flash.net.URLRequest;        import flash.net.XMLSocket;        import flash.text.TextField;        import flash.utils.ByteArray;                public class Load extends Sprite        {                                protected var sock:Socket;                                protected var reads:ByteArray;                                protected var isConnection:Boolean;                                private var _tx:TextField;                                public function Load()                {                        this._init();                                        }                private function _init():void                {                        sock=new Socket();                                                sock.addEventListener(Event.CONNECT,onConnect);                                                sock.addEventListener(ProgressEvent.SOCKET_DATA,onData);                                                sock.addEventListener(Event.CLOSE,onClose);                                                sock.addEventListener(SecurityErrorEvent.SECURITY_ERROR,onError);                                                sock.addEventListener(IOErrorEvent.IO_ERROR,onIOError);                                                sock.connect("localhost",4324);                                                this.stage.addEventListener(MouseEvent.CLICK,onClick);                                                this._tx=new TextField();                                                addChild(this._tx);                                                this._tx.border=true;                                                this._tx.multiline=true;                                        }                public function onClick(ev:MouseEvent):void                {                        if(this.isConnection)                        {                                var mes:String="flash"+Math.floor(Math.random()*1000000);                                                                this.sendMes(mes);                                                                trace("发送给服务端数据是: ",mes);                                                        }else                        {                                trace("服务未被连接!");                        }                }                public function sendMes(mes:String):void                {                        var bytes:ByteArray=new ByteArray();                                                bytes.writeUTFBytes(mes+"\n");                                                bytes.position=0;                                                sock.writeBytes(bytes);                                                sock.flush();                                        }                public function onConnect(ev:Event):void                {                        trace("连上服务端");                                                this.isConnection=true;                                        }                public function onData(ev:ProgressEvent):void                {                        trace("收到服务器发来的数据");                                                if(sock.bytesAvailable)                        {                                reads=new ByteArray();                                                                sock.readBytes(reads);                                                                trace(reads);                                                                _tx.appendText("  "+reads);                                                                                                                        }                }                public function onClose(ev:Event):void                {                        trace("服务被关闭");                                                this.isConnection=false;                                        }                public function onError(ev:SecurityErrorEvent):void                {                        trace("沙箱错误");                }                public function onIOError(ev:IOErrorEvent):void                {                        trace("接口错误,请检查ip和端口");                }                        }}


//-------------服务端代码:
Server.php
<?php/*** Created on Mar 9, 2011* @auth hui.wang* This Class is Server*/class Server{        public $host;                public $port;                public $isListen=true;                protected $sock;                protected $bind;                protected $listen;                protected $connection;                protected $input;                protected $output;                public $crossdomain;                public function __construct($ip=null,$entrance=null)        {                $this->host=$ip;                                $this->port=$entrance;                                $this->setCrossDomain();                        }        /**socket开始*/        public function start()        {                $this->serverLoop();                        }        /**关闭socket*/        protected function shutdown()        {                socket_close($this->connection);                                socket_close($this->sock);                        }        protected function serverLoop()        {                $this->sock=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);                                if($this->sock)                {                        echo "Socket has been created \n";                                                                }else                {                        echo "failed to create socket".socket_strerror($this->sock)."\n";                                                exit();                                        }                $this->bind=socket_bind($this->sock,$this->host,$this->port);                                if($this->bind)                {                        echo "Socket has been bind \n";                                        }else                {                        echo "failed to bind socket: ".socket_strerror($this->bind)."\n";                                                exit();                }                                $this->listen=socket_listen($this->sock,5);                                if($this->listen)                {                        echo "Socket is listening \n";                                        }else                {                        echo "failed to listen to socket: ".socket_strerror($this->listen)."\n";                                               exit();                }                                echo "waiting for clients to connect \n";                                 while($this->isListen)                {                        $this->connection=socket_accept($this->sock);                                                if(!$this->connection)                        {                                usleep(100);                                                         }else if($this->connection>0)                        {                                echo "A connection...\n";                                                                $this->handleClient();                                                        }                                        }                $this->shutdown();                        }        /**设置crossdomain.xml字符串*/        protected final function setCrossDomain()        {                $this->crossdomain="<cross-domain-policy>" .                                                        "<allow-access-from domain='*' to-ports='*' />" .                                                        "</cross-domain-policy>" .                                                        "\0";        }        /**处理客户端*/        protected function handleClient()        {                while($this->input=socket_read($this->connection,2048))                {                        if(strpos($this->input,'policy-file-request'))                        {                                socket_write($this->connection,$this->crossdomain,strlen($this->crossdomain));                                                        }else                        {                                $this->input=trim($this->input);                                                        echo "Recived mes: ".$this->input."\n";                                                        $this->output=strrev($this->input)."\n";                                                        echo "Back to client mes:(len is ".strlen($this->output).") ".$this->output."\n";                                                        socket_write($this->connection,$this->output,strlen($this->output))or die("Could not write output\n");                        }                                        }                socket_close($this->connection);                        }        }?>


start.php代码
<?php/** Created on Mar 9, 2011* @auth hui.wang*/include_once 'Server.php';$server=new Server("localhost",4324);$server->start();?>



热点排行