php与flash as3 socket通信传送文件实现代码


Posted in PHP onAugust 16, 2014

前段时间在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);
PHP 相关文章推荐
php面向对象全攻略 (十一)__toString()用法 克隆对象 __call处理调用错误
Sep 30 PHP
PHP扩展编写点滴 技巧收集
Mar 09 PHP
php学习之变量的使用
May 29 PHP
php设计模式 Prototype (原型模式)代码
Jun 26 PHP
php 文章调用类代码
Aug 11 PHP
PHP输出XML到页面的3种方法详解
Jun 06 PHP
PHP以mysqli方式连接类完整代码实例
Jul 15 PHP
PHP 正则表达式小结
Feb 12 PHP
php常量详细解析
Oct 27 PHP
php表单提交实例讲解
Nov 12 PHP
laravel框架创建授权策略实例分析
Nov 22 PHP
PHP遍历数组的6种方式总结
Nov 17 PHP
php操作XML、读取数据和写入数据的实现代码
Aug 15 #PHP
php中操作memcached缓存进行增删改查数据的实现代码
Aug 15 #PHP
php上传图片之时间戳命名(保存路径)
Aug 15 #PHP
php中将一段数据存到一个txt文件中并显示其内容
Aug 15 #PHP
PHP反向代理类代码
Aug 15 #PHP
ThinkPHP中自定义目录结构的设置方法
Aug 15 #PHP
win7 64位系统 配置php最新版开发环境(php+Apache+mysql)
Aug 15 #PHP
You might like
php数组的一些常见操作汇总
2011/07/17 PHP
thinkphp3.x中变量的获取和过滤方法详解
2016/05/20 PHP
yii2.0实现创建简单widgets示例
2016/07/18 PHP
PHP实现链式操作的原理详解
2016/09/16 PHP
PHP实现数组根据某个字段进行水平合并,横向合并案例分析
2019/10/08 PHP
学习js所必须要知道的一些
2007/03/07 Javascript
改版了网上的一个js操作userdata
2007/04/27 Javascript
javascript静态的url如何传递
2007/05/03 Javascript
jquery.cookie.js 操作cookie实现记住密码功能的实现代码
2011/04/27 Javascript
js+html5实现canvas绘制圆形图案的方法
2015/06/05 Javascript
JS提示:Uncaught SyntaxError:Unexpected token ) 错误的解决方法
2016/08/19 Javascript
全面解析Bootstrap表单样式的使用
2016/09/09 Javascript
微信小程序 wxapp视图容器 view详解
2016/10/31 Javascript
详解React开发中使用require.ensure()按需加载ES6组件
2017/05/12 Javascript
深入理解Angular中的依赖注入
2017/06/26 Javascript
js 开发之autocomplete=&quot;off&quot;在chrom中失效的解决办法
2017/09/28 Javascript
JS实现中文汉字按拼音排序的方法
2017/10/09 Javascript
简单的三步vuex入门
2018/05/20 Javascript
JavaScript动态创建二维数组的方法示例
2019/02/01 Javascript
JS开发自己的类库实例分析
2019/08/28 Javascript
原生js实现下拉选项卡
2019/11/27 Javascript
详解Vue数据驱动原理
2020/11/17 Javascript
Python PyQt4实现QQ抽屉效果
2018/04/20 Python
python中的插值 scipy-interp的实现代码
2018/07/23 Python
想学python 这5本书籍你必看!
2018/12/11 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
2019/01/17 Python
python 字典访问的三种方法小结
2019/12/05 Python
python和php哪个容易学
2020/06/19 Python
详解CSS3弹性伸缩盒
2020/09/21 HTML / CSS
美国生日蛋糕店:Bake Me A Wish!
2017/02/08 全球购物
马来西亚网上购物:Youbeli
2018/03/30 全球购物
写好自荐信需做到的5要点
2014/03/07 职场文书
危爆物品安全大检查大整治工作方案
2014/05/03 职场文书
2015年班级工作总结范文
2015/04/03 职场文书
公司客户答谢酒会祝酒词
2015/08/11 职场文书
详解Java实现设计模式之责任链模式
2021/06/23 Java/Android