设为首页 收藏本站
查看: 497|回复: 0

[经验分享] [转] flash socket与php socket通信的例子

[复制链接]

尚未签到

发表于 2017-4-8 08:50:34 | 显示全部楼层 |阅读模式
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();
?>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-361730-1-1.html 上篇帖子: 【转贴】PHP服务器变量$_SERVER详解 下篇帖子: php发邮件程序怪现象,求解释
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表