4

SWF が提供されているサーバー以外のサーバーへの Flash のバイナリ ソケット接続をセットアップしようとしています。ソケット ポリシー ファイルに関する Adob​​e のドキュメントに従って、ターゲット サーバーの 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 のサンプル ポリシー ファイル サーバーでも試してみましたが、結果は同じでした。

4

1 に答える 1

1

ネット分析ツールを使用した後、私は答えを見つけました.Flashは、3秒のタイムアウトが経過した後でも、失敗したリクエストから843へのソケットを閉じません。

ソケットが完全に閉じるまでにさらに数秒かかります。その間に接続を再確立しようとすると、別のブラウザ ウィンドウを使用していても失敗します。

于 2012-06-12T12:13:20.877 に答える