SWF が提供されているサーバー以外のサーバーへの Flash のバイナリ ソケット接続をセットアップしようとしています。ソケット ポリシー ファイルに関する Adobe のドキュメントに従って、ターゲット サーバーの 843 ポートからこのファイルを提供します。
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<!-- Policy file for xmlsocket://socks.mysite.com -->
<cross-domain-policy>
<allow-access-from domain="*" to-ports="6666" />
</cross-domain-policy>
次に、次の AS3 コードを使用して 6666 ポートに接続します。
sock.addEventListener(Event.CLOSE, closeHandler);
sock.addEventListener(Event.CONNECT, connectHandler);
sock.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
sock.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
sock.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
sock.connect('myserver', 6666);
これは完全に機能します。しかし、843 以外のポートからポリシー ファイルを提供しようとすると、状況が悪化します。ポリシー ファイル サーバーをポート 6669 でリッスンするように設定し、Flash コードを変更して、接続を試行する前にこの呼び出しを追加すると、次のようになります。
Security.loadPolicyFile("xmlsocket://myserver:6669");
.. その後、接続は約半分の時間しか機能せず、そうでない場合はセキュリティ エラー #2048 が発生します。それらのインスタンスをチェックインしましたが、ポリシー ファイル サーバーは、クライアントから xml ファイルを返す要求を受信しません。
843 または 6669 からサービスを提供する場合、サーバー コードはまったく同じです。XML 文字列の後に null バイトが送信されていることを確認しました。Adobe のサンプル ポリシー ファイル サーバーでも試してみましたが、結果は同じでした。