php与flash as3 socket通信传送文件实现代码
发布:smiling 来源: PHP粉丝网 添加日期:2021-03-31 10:48:44 浏览: 评论:0
这篇文章主要介绍了php与flash as3 socket通信传送文件实现代码,本文含AS3代码和PHP代码,需要的朋友可以参考下
前段时间在flashseer看到有人提到:可以通过socket方式传送swf文件,让用户无法获取到swf文件… 当时还没有出as3的反编译,所以对程序的保护没有在意.随着反编译程序的平民化,不希望别人看到源代码的朋友就比较着急…
通过socket方式传送swf文件来避免泄漏源代码的思路(只适用as3): 让主程序的loader(前台swf)通过socket连接到后台程序,然后请求需要的主程序文件.后台读取主程序数据通过socket发送给主程序的 loader.前台swf适用Loader.loadBytes方法显示主程序文件.
下面是测试的源程序:
- package {
- import flash.display.Sprite;
- import flash.net.Socket;
- import flash.events.*;
- import flash.errors.IOError;
- import flash.display.Loader;
- public class SocketTest extends Sprite {
- public function SocketTest() {
- var socket = new Socket();
- socket.connect("localhost", 5277);
- socket.addEventListener(Event.CLOSE, closeHandler);
- socket.addEventListener(Event.CONNECT, connectHandler);
- socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
- socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
- socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
- var response:String;
- function writeln(str:String):void {
- str+="";
- try {
- socket.writeUTFBytes(str);
- } catch (e:IOError) {
- trace(e);
- }
- }
- function sendRequest():void {
- trace("sendRequest");
- response="";
- writeln('bin');
- socket.flush();
- }
- function readResponse():void {
- //接受数据
- var str:String=socket.readUTFBytes(socket.bytesAvailable);
- response+=str;
- //当数据以end结束的时候,数据传输结束
- if (StringUtil.endsWith(str,'end')) {
- response=response.substr(0,response.length-3);
- //把字符串转换为ByteArray
- var ba=Base64.decodeToByteArray(response);
- //trace('bytearray=====',ba);
- var l:Loader = new Loader();
- //从 ByteArray 对象中所存储的二进制数据中加载。
- l.loadBytes(ba);
- //trace(l.content);
- addChild(l);
- }
- }
- function closeHandler(e:Event):void {
- trace("Socket closed! ");
- }
- function connectHandler(e:Event):void {
- trace("Socket connected!");
- sendRequest();
- }
- function ioErrorHandler(e:IOErrorEvent):void {
- trace("IOError!");
- }
- function securityErrorHandler(e:SecurityErrorEvent):void {
- trace("SecurityError!");
- }
- function socketDataHandler(e:ProgressEvent):void {
- trace("Socket have data!");
- readResponse();
- }
- }
- }
- }
PHP:
- //后台scoket程序,由于适用php写比较简单,就用php写了.
- //error_reporting(E_ALL);
- error_reporting(0);
- set_time_limit(0);
- ob_implicit_flush();
- $address = 'localhost';
- $port = 5277;
- if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
- echo 'socket_create() failed: reason: ' . socket_strerror($sock) . '\n';
- }
- if (($ret = socket_bind($sock, $address, $port)) < 0) {
- echo 'socket_bind() failed: reason: ' . socket_strerror($ret) . '\n';
- }
- if (($ret = socket_listen($sock, 5)) < 0) {
- echo 'socket_listen() failed: reason: ' . socket_strerror($ret) . '\n';
- }
- echo 'connect…………….';
- do {
- if (($msgsock = socket_accept($sock)) < 0) {
- echo 'socket_accept() failed: reason: ' . socket_strerror($msgsock) . '\n';
- break;
- }
- do {
- socket_recv($msgsock, $buf, 2048, 0);
- if ($buf == "") {
- socket_close($msgsock);
- echo "some one quit";
- break;
- } else if ($buf == "bin") {
- //读取主程序数据
- $f = fopen('main.swf','r');
- $data = fread($f,filesize('main.swf'));
- fclose($f);
- //转换为字符串
- //echo base64_encode($data);
- $talkback = base64_encode($data).'end';
- }
- //发送
- socket_send($msgsock, $talkback, strlen($talkback),0);
- } while (true);
- socket_close($msgsock);
- } while (true);
- socket_close($sock);
Tags: socket通信
相关文章
- ·php socket通信机制实例说明与代码(2014-09-09)
- ·PHP实现websocket通信的方法示例(2021-10-27)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)