php与客户端通信.doc_第1页
php与客户端通信.doc_第2页
php与客户端通信.doc_第3页
php与客户端通信.doc_第4页
php与客户端通信.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

php与客户端通信用php的socket跟flash的socket通信时间:2009-10-27 15:26:18来源:网络 作者:未知 点击:1343次 关于socket不多说了,这个网上的资料很多,关于flash的资料也很多,这里只说在网上找不到资料或者资料很少的哦东西php的socket资料可谓少之又少,光是在google上搜php socket,出来的结果页就是那么三四篇文章,点进关于socket不多说了,这个网上的资料很多,关于flash的资料也很多,这里只说在网上找不到资料或者资料很少的哦东西 php的socket资料可谓少之又少,光是在google上搜php socket,出来的结果页就是那么三四篇文章,点进去看看,基本都是从手册上抄下来的,一点问题都起不了,以至于我花了两天时间才使php和flash成功通信,呵呵其实,php和flash的socket通信不是问题的难点,难点在于flash的安全策略,特别是socket,特别是在flash player 10中要求更加严格.下面分几个部分来说:php的socketflash的socketflash的安全策略怎么用php解决这个策略希望对缺乏资料的人有所帮助,如果你用的其他后台语言与flash交互,可能比php简单,因为php的确不是个做socket的好东西,但是或许某个时刻你就会用到这个(1)php的socket:先贴一段代码,就是我实现通信的程序中的代码: 1. ?php 2. set_time_limit(0); 3. $address = ; 4. ob_implicit_flush(); 5. /* 6. * Created on 2009-9-14 7. * 8. * To change the template for this generated file go to 9. * Window - Preferences - PHPeclipse - PHP - Code Templates 10. */ 11. 12. $port = 8083; 13. 14. if ($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) 0) 15. echo socket_create() failed: reason: . socket_strerror($sock) . n; 16. 17. 18. if ($ret = socket_bind($sock, $address, $port) 0) 19. echo socket_bind() failed: reason: . socket_strerror($ret) . n; 20. 21. 22. if ($ret = socket_listen($sock, 5) 0) 23. echo socket_listen() failed: reason: . socket_strerror($ret) . n; 24. 25. do 26. if (!($msgsock = socket_accept($sock) 27. echo socket_accept() failed: reason: . socket_strerror($msgsock) . n; 28. break; 29. 30. /* 开始接受socket传过来的数据s. */ 31. 32. do 33. 34. /如果是安全策略请求,则传输安全策略文件内容 35. if($buf = socket_read($msgsock, 2048) 36. if(strpos($buf,policy-file-request) 37. $msg =; 38. socket_write($msgsock, $msg.0, strlen($msg.0); 39. 40. 41. /答复数据 42. 43. $talkback = PHP: You said $buf.n; 44. socket_write($msgsock, $talkback, strlen($talkback); 45. 46. 47. 48. while (true); 49. socket_close($msgsock); 50. while (true); 51. /socket_close($spawn); 52. /socket_close($socket); 53. ?(2)flash的socket通信: flash的socket通信也是资料比较多,直接贴代码 1. package 2. 3. import fl.controls.TextArea; 4. import fl.core.UIComponent; 5. 6. import flash.events.*; 7. import .Socket; 8. import flash.system.*; 9. import flash.utils.ByteArray; 10. import flash.utils.setTimeout; 11. /* 12. * . 13. * author DefaultUser (Tools - Custom Arguments.) 14. */ 15. public class CustomSocket 16. 17. private const CR:int = 13; / Carriage Return (CR) 18. private const WILL:int = 0xFB; / 251 - WILL (option code) 19. private const WONT:int = 0xFC; / 252 - WONT (option code) 20. private const DO:int = 0xFD; / 253 - DO (option code) 21. private const DONT:int = 0xFE; / 254 - DONT (option code) 22. private const IAC:int = 0xFF; / 255 - Interpret as Command (IAC) 23. 24. private var serverURL:String; 25. private var portNumber:int; 26. private var socket:Socket; 27. private var ta:TextArea; 28. private var state:int = 0; 29. System.useCodePage = false; 30. public function CustomSocket(server:String, port:int, output:TextArea) 31. 32. serverURL = server; 33. portNumber = port; 34. ta = output; 35. socket = new Socket(); 36. socket.addEventListener(Event.CONNECT, connectHandler); 37. socket.addEventListener(Event.CLOSE, closeHandler); 38. socket.addEventListener(ErrorEvent.ERROR, errorHandler); 39. socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); 40. socket.addEventListener(ProgressEvent.SOCKET_DATA, dataHandler); 41. 42. / Security.loadPolicyFile(xmlsocket:/ + serverURL + :+portNumber); 43. 44. try 45. 46. msg(Trying to connect to + serverURL + : + portNumber + n); 47. socket.connect(serverURL,portNumber); 48. 49. catch (error:Error) 50. 51. msg(error.message + n); 52. / socket.close(); 53. 54. 55. public function ioErrorHandler(event:IOErrorEvent):void 56. 57. msg(Unable to connect: socket error.n); 58. 59. public function writeBytesToSocket():void 60. socket.writeUTFBytes(sssssssssssssssssssss); 61. socket.flush(); 62. 63. private function connectHandler(event:Event):void 64. if (socket.connected) 65. msg(connected.n); 66. 67. else 68. msg(unable to connectn); 69. 70. 71. private function closeHandler(event:Event):void 72. 73. msg(closed.n); 74. 75. private function errorHandler(event:ErrorEvent):void 76. msg(event.text + n); 77. 78. private function dataHandler(event:ProgressEvent):void 79. while ( socket.bytesAvailable ) 80. / Read a byte from the socket and display it 81. var data = socket.readUTFBytes(socket.bytesAvailable); 82. ta.text+=data; 83. 84. 85. private function msg(value:String):void 86. ta.text += value; 87. ta.dispatchEvent(new Event(Event.CHANGE); 88. setTimeout(setScroll, 100); 89. 90. public function setScroll():void 91. ta.verticalScrollPosition = ta.maxVerticalScrollPosition; 92. 93. public function closeSocket():void 94. socket.close(); 95. 96. public function sendM(e:String):void 97. 98. socket.writeUTFBytes(e); 99. socket.flush();100. 101. 102.103. (3).安全策略flash的安全策略是很严格的,特别是在flash 10中,当使用socket的时候必须存在策略文件才能继续传输数据,这个文件以前可以直接存放在根目录即可,而现在要求必须在socket中直接传输才行,默认情况下flash会在服务器的843端口寻找这个策略文件的传输socket,可是php中开多个端口传输很有问题,不能实现多线程是主要问题,所以这个方法不太好,也不太直接,其实还有一个非常直接的方法,就是不用任何端口或者开辟其他通信,flash在向某个端口请求数据的时候,第一次会发送一个字符串,如果服务器收到这个字符窜,直接回复一个策略文件格式的字符串,即可通过安全验证,然后就可以传输数据了,我做过实验,的确可以通信了,但是因为是php,一直执行某个网页才能监听socket,所以不能放在服务器上给大家来测试,如果感兴趣可以找我探讨:qq:676588498; 1. if($buf = socket_read($msgsock, 2048) 2. if(strpos($buf,policy-file-request) 3. $msg =; 4. socket_write($msgsock, $msg.0, strlen($msg.0); 5. 6. 7. /答复数据 8. 9. $ta

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论