引越しました!

http://blog.mogmet.com/blog-entry-9.html

へアクセスしてください。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

policy-file-requestの対処法

最新のFlash Playerでは、サーバーと通信するとき、\0(\0はNULL文字)という文字列を送信してきます。これに対して\0というような文字列を返してやらないと、まったく通信できません。

そこでその文字列を返す方法を探って見たところ、色々方法があったのでメモ。



1.rubyの場合
http://d.hatena.ne.jp/viver/20080421/p1
主な仕組みなどはここみれば大体わかるかな?

ついでにrubyバージョンの方法もあったのでメモ。


require 'socket'
require 'rexml/document'

if ARGV.empty?
puts "Usage: #{File.basename($0)} "
exit 1
end

policy = File.read(ARGV[0]) + "\0"

REQUEST_LIMIT = 32
def log(addr, msg)
puts "#{addr} #{msg}"
end

srv = TCPServer.open(843)
while true
Thread.start(srv.accept) {|s|
port, addr = Socket.unpack_sockaddr_in( s.getpeername )
begin
log addr, "connection accepted"

buf = ""
begin
buf << s.sysread(REQUEST_LIMIT)
raise "request too big" if buf.length > REQUEST_LIMIT
end until buf.include?("\0")

log addr, "received request #{buf.inspect}"

req = REXML::Document.new(buf)
unless req.root.name == "policy-file-request"
raise "invalid request"
end

log addr, "sending policy file"
s.write policy

rescue
log addr, "invalid request: #{$!.inspect}"
ensure
s.close
end
}
end



でも実際につかってみたら、

C:/ruby/socket.rb:16:in `': uninitialized constant TCPServer (Na
meError)
from c:/ruby/socket.rb:1:in `require'
from c:/ruby/socket.rb:1:in `

'



っていわれて使えなかったので使うのあきらめた。




PHPの場合
http://ammonlauritzen.com/blog/2007/12/13/new-flash-security-policies/
ここから引用


<?php
if( posix_getuid() != 0 ) // これはWindows環境では使えない関数なので、Windowsの場合はここを削除
die( "You must run this script as root.\n" );

$sock = @socket_create( AF_INET, SOCK_STREAM, SOL_TCP );
if( !$sock )
die( "Unable to create socket.\n" );

$succ = @socket_bind( $sock, "0.0.0.0", 843 );
if( !$succ )
die( "Unable to bind to port 843.\n" );

$succ = @socket_listen( $sock );
if( !$succ )
die( "Unable to start listening.\n" );


while( true ) {
$r = $w = $e = array( $sock );
if( @socket_select( $r, $w, $e, null ) !== false ) {
$conn = @socket_accept( $sock );
if( $conn !== false ) {
socket_write( $conn, $policy_file );
socket_close( $conn );
} else {
echo "socket_accept() failed?\n";
break;
}
} else {
echo "socket_select() failed?\n";
break;
}
}

socket_close( $sock );




c:\php\php c:\www/socket.phpとコマンドプロンプトで実行しておくことでソケットをまちうけている状態にして、動作することができた。




Javaの場合

import java.net.Socket;

import java.net.ServerSocket;

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.io.IOException;



public class socket {

 public static final int ECHO_PORT = 843;

 public static void main(String args[]) {

  ServerSocket serverSocket = null;

  try {

   serverSocket = new ServerSocket(ECHO_PORT);

   System.out.println("Serverが起動しました(port=" + serverSocket.getLocalPort() + ")");

   while (true) {

    Socket socket = serverSocket.accept();

    new EchoThread(socket).start();

   }

  } catch (IOException e) {

   e.printStackTrace();

  } finally {

   try {

    if (serverSocket != null) {

     serverSocket.close();

    }

   } catch (IOException e) {

   }

  }

 }

}



class EchoThread extends Thread {

 private Socket socket;

 

 public EchoThread(Socket socket) {

  this.socket = socket;

  System.out.println("接続されました " + socket.getRemoteSocketAddress());

 }



 public void run() {

  try {

   BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

   PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

//   out.println("");

   out.println("");



  } catch (IOException e) {

   e.printStackTrace();

  } finally {

   try {

    if (socket != null) {

     socket.close();

    }

   } catch (IOException e) {}

   System.out.println("切断されました " + socket.getRemoteSocketAddress());

  }

 }

}


Javaだったら大体環境も容易されてるしで、実行しやすいかな?

Adobe Flash CS4 詳細!ActionScript3.0入門ノート[完全改訂版](CD-ROM付)




Adobe Flash CS4 Professional (V10.0) 日本語版 Windows版

コメントの投稿

非公開コメント

スポンサーリンク
FC2カウンター
最新記事
最新コメント
カテゴリ
アマゾンドリンク
検索フォーム
リンク
ブロとも申請フォーム

この人とブロともになる

アクセスランキング
[ジャンルランキング]
コンピュータ
2332位
アクセスランキングを見る>>

[サブジャンルランキング]
未設定
--位
アクセスランキングを見る>>
バックリンク
最新トラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。