serproxyと通信するためにAS3.0のSocketをいじってるのだけれど、これがなかなかくせ者。
[as]
import flash.net.Socket;
import flash.events.*;
send_btn.addEventListener(MouseEvent.CLICK,send_btn_click);
var num:Number;
var s:Socket = new Socket;
s.connect(”127.0.0.1″,5331);
function send_btn_click(ev:MouseEvent) {
s.writeInt(num++);
s.flush();
}
[/as]
(コードがヒドいのは、動作確認してるだけなので許して!)
で、オーサリング環境で、Ctrl+Enterでムービープレビューして、SocketDebuggerでチェックすると、ちゃんとデータを送信できてる。
しかし、swfをクリックして、Flash Playerで動かすと、Socketにコネクトできない。
なにが違うんだろ~???とかなり悩んだが、普通のFlash Player9じゃなく、Debug用のPlayerで動かすと、
SecurityError: Error #2010: ローカルファイルシステムの SWF ファイルはソケットの使用が許可されません。
at flash.net::Socket/connect()
at socket_only_fla::MainTimeline/socket_only_fla::frame1()
というエラーが。なにー!ローカルのswfからSocketへアクセスできないなんて、聞いてないよ~
どうしたらいいんだろう・・解決策がわからない。
・・・いろいろ調べてると、
Adobe – デベロッパーセンター : セキュリティに関するFlash Player 9の変更点
[233457]Flash Player バージョン 9.0.115.0 以降でソケットが機能しない
・・・う、、これは、、いま作ってる案件において絶望的な状況ではないか・・・。ソケットポリシーファイルを返信できるサーバがないとSocketは使えないということか・・・!Offlineな状況かつ、Webサーバなど居ない状況で、単独のswfがserproxyと通信しようと思っても、絶対できない!ということではないかっ!!!!!!!
(ポリシーファイルを返してくれるサーバが居ない!!)
デフォルトでは、ソケットおよび XML ソケット接続へのクロスドメインアクセスは無効になっています。また 1024 未満のポートでは、SWF ファイルと同じドメインでのソケット接続へのアクセスは、デフォルトで無効に設定されています。これらのポートへのアクセスは、次の場所のいずれかに所属するクロスドメインポリシーファイルを使用することで許可できます。
* メインソケット接続と同じポート
* 別のポート
* ソケットサーバーと同じドメイン内のポート 80 上の HTTP サーバー
ぐわー絶望的だーもうだめだー回線切って氏ぬしかない~
Popularity: 33% [?]





7月 10th, 2008 at 4:21 PM
その後、何か解決策を見つけられました?
やはり逝くしかないでしょうかー
7月 11th, 2008 at 10:46 AM
adobeからは、ソケットからポリシーファイルを返すなんらかのツールがあったと思いますが、たしかpythonかrubyのスクリプトで、結局、じゃあそれらが動く環境を・・と、さらに複雑です。
1つの解決策としては、プロジェクトファイル(スタンドアロンの実行形式)にすることです。
Flash Player制限から外れることができます(逆に制限されることもあります)
AIRにすればまた違うのでは、、と思ってるんですが、そこまでまだ検証できてません。検証できたらまた記事にします!
7月 11th, 2008 at 5:47 PM
なるほど..
ぢつはアドビに文句ゆってみたんです。
そしたら、これを読め、とだけ言われて返り討ちにされました。
http://support.adobe.co.jp/faq/faq/qadoc.sv?233457+002
欲しいのはこんなのではなく、自分自身への接続についての情報なんですがー
プロジェクトにしたら動くのはおっしゃる通りなんですが、何故かスレイプニルは動くんですがIEだと、コネクションのところで返ってこなくなるんです。
そんなことないですか?ウチだけですかね?
7月 11th, 2008 at 6:04 PM
ども、コメントありがとうございます!
>そしたら、これを読め、とだけ言われて返り討ちにされました。
FxCK!アドビ 凸(-_-メ
スレイプニルで動いて、IEで動かないってことは、使ってるPlayerのバージョンが違うってことはないでしょうか。スレイプニルがIEコンポーネント使ってるので、基本的には同じはずですけど、IE6と7と混在してるとか、スレイプニルがGeckoエンジンを使うように設定してるとか・・?
Playerをdebug playerにして、どっかのディレクトリに書き出されるエラーメッセージを読むのが確実だと思います。
結局、ソケット通信/接続が、他アプリか、自分かという区別は無いので、やはり制限されるんですよね。
ポリシーファイルは、クロスドメイン前提だといいんですけど、スタンドアロンの場合、非常に困ります。
フィジカルプログラミングに、Flashが使えそうと思ってたんですが、このソケット周りの仕様で、かなり絶望的です…
1月 21st, 2010 at 10:33 AM
http://www.macromedia.com/support/documentation/jp/flashplayer/help/settings_manager04.html
ここのグローバルセキュリティ設定パネルで、ローカルにあるswfを常に信頼することによって解決されました。どうでしょう。
参考: http://hectionscript.net/blog/archives/19
1月 29th, 2010 at 12:23 PM
Butchiさんコメントありがとうございます。
自分でテストする場合はそれでもよいのですが、第三者に使ってもらいたい場合はそうはいきませんよね。
ついでにいうと、そのセキュリティ設定パネル、使い勝手が悪いですよね〜
4月 12th, 2010 at 10:21 PM
[...] ActionScript3.0 の Socket通信でハマる » TECH Matari [...]