关于socket不多说了,这个网上的资料很多,关于flash的资料也很多,这里只说在网上找不到资料或者资料很少的哦东西
php的socket资料可谓少之又少,光是在google上搜php socket,出来的结果页就是那么三四篇文章,点进去看看,基本都是
从手册上抄下来的,一点问题都起不了,以至于我花了两天时间才使php和flash成功通信,呵呵
其实,php和flash的socket通信不是问题的难点,难点在于flash的安全策略,特别是socket,特别是在flash player 10中要求更加
严格.
下面分几个部分来说:php的socket\flash的socket\flash的安全策略\怎么用php解决这个策略
希望对缺乏资料的人有所帮助,如果你用的其他后台语言与flash交互,可能比php简单,因为php的确不是个做socket的好东西,
但是或许某个时刻你就会用到这个
(1)php的socket:
先贴一段代码,就是我实现通信的程序中的代码:
1. <?php
2. set_time_limit(0);
3. $address = "127.0.0.1";
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 ="<cross-domain-policy><allow-access-from domain=''*'' to-ports=''*'' /></cross-domain-policy>";
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 flash.net.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 - WON''T (option code)
20. private const DO:int = 0xFD
|