当前位置:首页 > PHP教程 > php高级应用 > 列表

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方法显示主程序文件.

下面是测试的源程序:

  1. package { 
  2. import flash.display.Sprite; 
  3. import flash.net.Socket; 
  4. import flash.events.*; 
  5. import flash.errors.IOError; 
  6. import flash.display.Loader; 
  7.  
  8. public class SocketTest extends Sprite { 
  9.   public function SocketTest() { 
  10.   var socket = new Socket(); 
  11.   socket.connect("localhost", 5277); 
  12.   socket.addEventListener(Event.CLOSE, closeHandler); 
  13.   socket.addEventListener(Event.CONNECT, connectHandler); 
  14.   socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); 
  15.   socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); 
  16.   socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler); 
  17.   var response:String; 
  18.  
  19.   function writeln(str:String):void { 
  20.    str+=""
  21.    try { 
  22.    socket.writeUTFBytes(str); 
  23.    } catch (e:IOError) { 
  24.    trace(e); 
  25.    } 
  26.   } 
  27.   function sendRequest():void { 
  28.    trace("sendRequest"); 
  29.    response=""
  30.    writeln('bin'); 
  31.    socket.flush(); 
  32.   } 
  33.   function readResponse():void { 
  34.    //接受数据 
  35.    var str:String=socket.readUTFBytes(socket.bytesAvailable); 
  36.    response+=str; 
  37.    //当数据以end结束的时候,数据传输结束 
  38.    if (StringUtil.endsWith(str,'end')) { 
  39.    response=response.substr(0,response.length-3); 
  40.    //把字符串转换为ByteArray 
  41.    var ba=Base64.decodeToByteArray(response); 
  42.    //trace('bytearray=====',ba); 
  43.    var l:Loader = new Loader(); 
  44.    //从 ByteArray 对象中所存储的二进制数据中加载。 
  45.    l.loadBytes(ba); 
  46.    //trace(l.content); 
  47.    addChild(l); 
  48.    } 
  49.   } 
  50.   function closeHandler(e:Event):void { 
  51.    trace("Socket closed! "); 
  52.   } 
  53.   function connectHandler(e:Event):void { 
  54.    trace("Socket connected!"); 
  55.    sendRequest(); 
  56.   } 
  57.   function ioErrorHandler(e:IOErrorEvent):void { 
  58.    trace("IOError!"); 
  59.   } 
  60.   function securityErrorHandler(e:SecurityErrorEvent):void { 
  61.    trace("SecurityError!"); 
  62.   } 
  63.   function socketDataHandler(e:ProgressEvent):void { 
  64.    trace("Socket have data!"); 
  65.    readResponse(); 
  66.   } 
  67.  
  68.   } 

PHP:

  1. //后台scoket程序,由于适用php写比较简单,就用php写了. 
  2. //error_reporting(E_ALL); 
  3. error_reporting(0); 
  4. set_time_limit(0); 
  5. ob_implicit_flush(); 
  6. $address = 'localhost'
  7. $port = 5277; 
  8. if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) { 
  9. echo 'socket_create() failed: reason: ' . socket_strerror($sock) . '\n'
  10. if (($ret = socket_bind($sock$address$port)) < 0) { 
  11. echo 'socket_bind() failed: reason: ' . socket_strerror($ret) . '\n'
  12. if (($ret = socket_listen($sock, 5)) < 0) { 
  13. echo 'socket_listen() failed: reason: ' . socket_strerror($ret) . '\n'
  14. echo 'connect…………….'
  15. do { 
  16. if (($msgsock = socket_accept($sock)) < 0) { 
  17.   echo 'socket_accept() failed: reason: ' . socket_strerror($msgsock) . '\n'
  18.   break
  19. do { 
  20.   socket_recv($msgsock$buf, 2048, 0); 
  21.   if ($buf == "") { 
  22.   socket_close($msgsock); 
  23.   echo "some one quit"
  24.   break
  25.   } else if ($buf == "bin") { 
  26.   //读取主程序数据 
  27.   $f = fopen('main.swf','r'); 
  28.   $data = fread($f,filesize('main.swf')); 
  29.   fclose($f); 
  30.   //转换为字符串 
  31.   //echo base64_encode($data); 
  32.   $talkback = base64_encode($data).'end'
  33.   } 
  34.   //发送 
  35.   socket_send($msgsock$talkbackstrlen($talkback),0); 
  36. while (true); 
  37. socket_close($msgsock); 
  38. while (true); 
  39. socket_close($sock); 

Tags: socket通信

分享到: