发新话题
打印

[编程] socket安全性新问题解决方法

socket安全性新问题解决方法

socket安全性新问题详解 由于Adobe最近更新了flashPlayer,播放器的安全问题改了一些东西,所以用flash AS2的XMLSocket或者AS3的Socket都会存在新的问题,本来以前运行好好的程序突然之间就连接不上了,本地测试没问题,放到网上就连接不上了,事实上我就是碰到了这样的问题,才迫使我去找办法解决.
           以AS2+java socket为例子说(AS3我没测试过,不过听WiZim说过应该也是如此),flash的写法还是原来的写法,要改的只是服务器端的socket. 只不过连接时候有些不同,首先,flash连接java socket,连接成功后会自动发安全请求到java socket,如果java socket返回正确的安全性文件,则flash 马上断掉这条连接,然后再重新连接java socket,而这次连接则像以前的连接一样,可以正常使用了.而如果返回的是null或者不正确的安全性文件则java,flash都会自动断掉连接,从而造成连接不上的情况.
          然后来看这个编译后连接成功的例子,我是参考http://www.jobems.com/Article_879883.htm里的例子.
          String xml = "<cross-domain-policy>";
          xml = xml + "<allow-access-from domain=\"*\" to-ports=\"5000,8080\" />";
          xml = xml + "</cross-domain-policy>";
          ServerSocket serverSocket = new ServerSocket(5000);
          while(true)
          {
              try
             {
                   Socket socket = serverSocket.accept();
                   System.out.println("连接成功......");
                   BufferedReader reader= new BufferedReader(new InputStreamReader(socket.getInputStream()));
                   PrintWriter output = new PrintWriter(socket.getOutputStream());
                   char[] by = new char[22];
                   reader.read(by,0,22);
                   String head = new String(by);
                   System.out.println("消息头:" + head);
                   if(head.equals("<policy-file-request/>"))
                   {
                          System.out.println("安全请求");
                          output.print(xml + "\0");
                          output.flush();
                   } else {
                         System.out.println("new thread start ------");              
                         ServerThread thread = new ServerThread(socket); thread.start();
                   }
                } catch (Exception e) {
                         System.out.println("服务器出现异常!" + e );
                   }
          }
         上面的xml就是服务器返回给flash的安全文件,告诉flash可以连接这个地址.这里首先获取消息,如果收到安全请求则返回安全文件(这条肯定是最先给服务器的,flash一连接上 socket就会自动发送),得到肯定后,flash,java都断掉这条连接,再重新连接,这时,flash就不会再发送安全请求了,这时socket就可以为它开启线程了 (thread.start();).          这样,假如一flash放在网页上,连接成功的输出应该是
                   连接成功......
                   消息头: <policy-file-request/>                   安全请求
                   连接成功......
         而当flash随便发一条信息给socket的时候,则有:
                  消息头:XXX
                  new thread start ------
         这时,连接正常运行.可查看附件.java刚刚学,有不对的地方希望指出来,别让我错下去

[ 本帖最后由 muye 于 2008-4-27 12:45 编辑 ]

附件

test2.swf (737 Bytes)

2008-4-27 12:39, 下载次数: 43

test2.fla (48 KB)

2008-4-27 12:39, 下载次数: 54

JavaServer.rar (1.66 KB)

2008-4-27 12:39, 下载次数: 57

TOP

留个记号线

TOP

呵呵,幸好以前就是这样写的,这次安全更新没有造成影响。
水星

TOP

帮助有说
分享是一种快乐,交流才可以提高

TOP

了解了
本广告位招租!需要者请联系QQ:20770162

TOP

好象我前天遇到的就是这问题,太及时了.我试试看

TOP

发新话题