XMLSocketで接続する際のポリシーファイル
http://livedocs.adobe.com/flash/9.0_jp/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001087.html
Flash Player 7 以降では外部に対してXMLSocket接続する場合、ポリシーファイルをサーバー側から返してあげないといけないらしい。
System.security.loadPolicyFile("xmlsocket://adobe.com:414");
こうやって、直接ファイルを指定するのではなくてホストアドレスとポート番号を指定する場合、一度Socketの接続を確立した後にすぐに "
最初かなりつまっていて、なぜかflash側の接続が切れる瞬間(ページを閉じるとか)に "
原因は調べてない。どちらも、どこかの解説サイトを参考にした。クライアント側がASを使う前提で解説しているページがいいかもしれない。
上手くいったコード
public void run() { while(isConnecting) { try { String inputLine = ""; // new code int c = in.read(); if(c == -1) {//close // クライアント側が切断 break; } while ( c != '\0') { inputLine += (char)c; c = in.read(); } inputLine = inputLine.trim(); if(checkPolicyFile(inputLine)) { // クライアントとの切断処理 break; } else { // ポリシーファイル要求でないのでメッセージを返す out.println("return:"+inputLine+" "+System.currentTimeMillis()); } } catch (IOException e) { // クライアントとの切断処理 } catch (Exception e) { // クライアントとの切断処理 } } // クライアント側が切断 } private boolean checkPolicyFile(String str) { if(str.equals("<policy-file-request/>")) { String xml = "<cross-domain-policy><allow-access-from domain=\"" + "*" + "\" to-ports=\""+ "*" + "\" /></cross-domain-policy>"; out.println(xml); return true; } return false; }
駄目だったコード
public void run() { while(isConnecting) { try { String inputLine; while ((inputLine = in.readLine()) != null) { inputLine = inputLine.trim(); if(checkPolicyFile(inputLine)) { // クライアントとの切断処理 break; } else { // ポリシーファイル要求でないのでメッセージを返す out.println("return:"+inputLine+" "+System.currentTimeMillis()); } } } catch (IOException e) { // クライアントとの切断処理 } catch (Exception e) { // クライアントとの切断処理 } // クライアント側が切断 } }