ActionScript 3.0 事始め part2 FTP over SSHの設定でハマる
4月 16

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% [?]

written by ANN

add to hatena hatena.comment (6) add to del.icio.us (2) add to livedoor.clip (0) add to Yahoo!Bookmark (0) Total: 8

7 Responses to “ActionScript3.0 の Socket通信でハマる”

  1. ハニウム Says:

    その後、何か解決策を見つけられました?
    やはり逝くしかないでしょうかー

  2. ANN Says:

    adobeからは、ソケットからポリシーファイルを返すなんらかのツールがあったと思いますが、たしかpythonかrubyのスクリプトで、結局、じゃあそれらが動く環境を・・と、さらに複雑です。

    1つの解決策としては、プロジェクトファイル(スタンドアロンの実行形式)にすることです。
    Flash Player制限から外れることができます(逆に制限されることもあります)

    AIRにすればまた違うのでは、、と思ってるんですが、そこまでまだ検証できてません。検証できたらまた記事にします!

  3. ハニウム Says:

    なるほど..
    ぢつはアドビに文句ゆってみたんです。
    そしたら、これを読め、とだけ言われて返り討ちにされました。
    http://support.adobe.co.jp/faq/faq/qadoc.sv?233457+002
    欲しいのはこんなのではなく、自分自身への接続についての情報なんですがー

    プロジェクトにしたら動くのはおっしゃる通りなんですが、何故かスレイプニルは動くんですがIEだと、コネクションのところで返ってこなくなるんです。
    そんなことないですか?ウチだけですかね?

  4. ANN Says:

    ども、コメントありがとうございます!

    >そしたら、これを読め、とだけ言われて返り討ちにされました。

    FxCK!アドビ  凸(-_-メ

    スレイプニルで動いて、IEで動かないってことは、使ってるPlayerのバージョンが違うってことはないでしょうか。スレイプニルがIEコンポーネント使ってるので、基本的には同じはずですけど、IE6と7と混在してるとか、スレイプニルがGeckoエンジンを使うように設定してるとか・・?

    Playerをdebug playerにして、どっかのディレクトリに書き出されるエラーメッセージを読むのが確実だと思います。

    結局、ソケット通信/接続が、他アプリか、自分かという区別は無いので、やはり制限されるんですよね。
    ポリシーファイルは、クロスドメイン前提だといいんですけど、スタンドアロンの場合、非常に困ります。

    フィジカルプログラミングに、Flashが使えそうと思ってたんですが、このソケット周りの仕様で、かなり絶望的です…

  5. Butchi Says:

    http://www.macromedia.com/support/documentation/jp/flashplayer/help/settings_manager04.html
    ここのグローバルセキュリティ設定パネルで、ローカルにあるswfを常に信頼することによって解決されました。どうでしょう。

    参考: http://hectionscript.net/blog/archives/19

  6. ANN Says:

    Butchiさんコメントありがとうございます。

    自分でテストする場合はそれでもよいのですが、第三者に使ってもらいたい場合はそうはいきませんよね。

    ついでにいうと、そのセキュリティ設定パネル、使い勝手が悪いですよね〜

  7. 怒涛のめもめもリンク集 | Gainer-miniを試す Says:

    [...] ActionScript3.0 の Socket通信でハマる » TECH Matari [...]

Leave a Reply