Google 手机可根据用户所在位置推送相应广告    2010-09-09 17:28:46

登陆|免费注册|会员中心|招贤纳士|手机留言|联系我们

 
 

好好学习网--PHP和FLASH的socket

作者:网络文章来源:互联网浏览次数:10 发表时间:2010-09-09返回列表

=======================第一页=======================

楼  主:最近工作闲来无事,于是想到了有不少人为flash的xmlsocket和 php 的socket 多线程通信问题犯愁,经过研究后,测试成功,贴码如下,望大家拍砖讨论~
PHP服务端:

  1. <?php
  2. //监听套接字=>数据读取流
  3.     $port = 8653;
  4. $adr = "172.16.100.136";
  5.    
  6.     // create a streaming socket, of type TCP/IP
  7. //创建一个数据流,TCP/IP类型
  8.     $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  9.    
  10.     // set the option to reuse the port
  11. //设置可以重用端口的选项
  12.     socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1);
  13. //设置非阻塞
  14.     socket_set_nonblock($sock);
  15.     // "bind" the socket to the address to "localhost", on port $port
  16.     // so this means that all connections on this port are now our resposibility to send/recv data, disconnect, etc..
  17. //绑定套接字到指定的地址和端口
  18. //而这意味着所有的消息发送/接受,,断开都要通过这个端口的链接
  19.     socket_bind($sock, 0, $port);
  20.    
  21.     // start listen for connections
  22. //开始侦听链接
  23.     socket_listen($sock);
  24.     // create a list of all the clients that will be connected to us..
  25.     // add the listening socket to this list
  26. //创建一份将连接我们的链接池
  27. //并且将监听套接字也添加到该池子
  28.     $clients = array($sock);
  29.     while (true) {
  30.   // create a copy, so $clients doesnt get modified by socket_select()
  31.   //创建一份复制,防止链接池不会被socket_select( )改变,因为是引用传入
  32.   
  33.   $newsock = @socket_accept($sock);
  34.   if (false === in_array($newsock, $clients) && false !== $newsock) {
  35.    $clients[] = $newsock;
  36.    $data = @socket_read($newsock, 1024, PHP_BINARY_READ);
  37.    $data = trim($data);
  38.    echo $data . "\n";
  39.    if (<policy-file-request/> === $data) {
  40.     $msg ="<cross-domain-policy><allow-access-from domain=* to-ports=* /></cross-domain-policy>\0";
  41.     socket_write($newsock, $msg, strlen($msg));
  42.     echo "PHP-Auth\n";
  43.    } else {
  44.     socket_getpeername($newsock, $ip);
  45.     echo "New client connected: {$ip}:\n";
  46.     $msg = $data . "\0";
  47.     socket_write($newsock, $msg, strlen($msg));
  48.    }
  49.    continue;  
  50.   } else {
  51.    $read = $clients;
  52.    // get a list of all the clients that have data to be read from
  53.    // if there are no clients with data, go to next iteration
  54.    //获取一份所有能读取到数据的链接池
  55.    //如果传递过来的链接池没有有数据的,进入下一个循环
  56.    $res = @socket_select($read, $write = NULL, $except = NULL, 0);
  57.    if (false === $res) {
  58.     echo "Client disconnected\n";
  59.     break;
  60.    } else if (0 < $res) {
  61.     foreach ($read as $read_sock) {
  62.      if ($sock !== $read_sock) {
  63.       $data = @socket_read($read_sock, 1024, PHP_BINARY_READ);
  64.       if (false === $data) {
  65.        // remove client for $clients array
  66.        $key = array_search($read_sock, $clients, true);
  67.        unset($clients[$key]);
  68.        //var_dump($read_sock);
  69.        echo "client disconnected.\n";
  70.       } else {
  71.        $data = trim($data);
  72.        if ( !== $data) {
  73.         //var_dump($clients);
  74.         //var_dump($read);
  75.         //echo "resource:$res\n";
  76.         echo $data . "...\n";
  77.         $msg = $data . "\0";
  78.         socket_write($read_sock, $msg, strlen($msg));
  79.        }
  80.       }
  81.      }
  82.     }
  83.    }
  84.   }
  85.     }
  86.     // close the listening socket
  87. //关闭监听套接字
  88.     @socket_close($sock);
  89. ?>
复制代码
HTML 代码:

  1. <HTML>
  2. <HEAD>
  3. <meta http-equiv=Content-Type content="text/html;  charset=GB2312">
  4. <TITLE>3</TITLE>
  5. <script>
  6. function back(msg) {
  7.   var obj = document.getElementById(res);
  8.   obj.innerHTML = obj.innerHTML + msg + "<br>\n";
  9. }
  10. function send() {
  11.   var msg = document.getElementById(msg).value;
  12.   window.document.myFlash.SetVariable("msg", msg);
  13. }
  14. </script>
  15. </HEAD>
  16. <BODY bgcolor="#FFFFFF">
  17. <div id="res"></div>
  18. <!-- URLs used in the movie-->
  19. <!-- text used in the movie-->
  20. <OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
  21. codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
  22. WIDTH="50" HEIGHT="40" id="myFlash" ALIGN="middle">
  23. <PARAM NAME=movie VALUE="3.swf">
  24. <PARAM NAME=quality VALUE=high>
  25. <PARAM NAME=bgcolor VALUE=#FFFFFF>
  26. <EMBED src="3.swf" quality=high bgcolor=#FFFFFF  WIDTH="550" HEIGHT="400" NAME="myFlash" ALIGN=""
  27. TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer" allowScriptAccess="sameDomain"   swLiveConnect="true"></EMBED>
  28. </OBJECT>
  29. <input type=text id="msg"><button onclick="send()">Send</button>
  30. </BODY>
  31. </HTML>
复制代码
FLASH 代码

  1. var mySocket = new XMLSocket();
  2. mySocket.connect("172.16.100.136", 8653);
  3. mySocket.onConnect = function(res) {
  4. if (false === res) {
  5.   getURL("javascript:back(Failed.)");
  6. } else {
  7.   getURL("javascript:back(success.)");
  8. }
  9. };
  10. mySocket.onData = function(msg) {
  11. getURL("javascript:back(Recv:" + msg + ")");
  12. return false;
  13. };
  14. mySocket.onClose = function() {
  15. getURL("javascript:back(Close!)");
  16. };
  17. function sendmsg(msg){
  18. mySocket.send(msg);
  19. getURL("javascript:back(send:" +  msg + ")");
  20. return false;
  21. };
  22. addProperty("msg",function(){},sendmsg);
复制代码

楼 1:以上是个抛砖引玉,目前只能发简单英文~望大家讨论


感谢用户[互联网用户]  IP[38.107.191.80]  时间[2010-09-09 17:29:59]提供辛勤劳动!

返回列表回到顶部

相关问题信息:好好学习网--ThinkGrouponV2.0正式版上线

相关问题信息:好好学习网--酒店预定系统

相关问题信息:好好学习网--编辑器高手,小弟跪求

相关问题信息:好好学习网--建议本版新增一个 Joomla 子版块

相关问题信息:好好学习网--jQuery UI标准后台页面演示系统

相关问题信息:好好学习网--led不能显示全部记录!

相关问题信息:好好学习网--Martin Fowler《企业应用架构模式》迷你电子书

相关问题信息:好好学习网--joomla 教程

相关问题信息:好好学习网--O'Reilly-《社交网站界面设计》迷你版电子书

相关问题信息:好好学习网--寻PHP技术开发小组合作

相关问题信息:好好学习网--承接各类php/java/vc小系统,网站项目

相关问题信息:好好学习网--对视频会议系统有兴趣的请进来

相关问题信息:好好学习网--php与led屏连接滚动显示产品

相关问题信息:好好学习网--joomla

相关问题信息:好好学习网--一个简单的图片展示小程序

相关问题信息:好好学习网--用Thinkphp框架开发的英语网址导航站

相关问题信息:好好学习网--php-CA 1.1 基于Web的证书颁发机构

相关问题信息:好好学习网--smarty知识手册

相关问题信息:好好学习网--邱郁惠-UML和OOAD快速入门-配套PPT资料