私は Flash ソケットを使用しており、C/Linux でサーバーをセットアップしています。ポリシー ファイルのリクエスト部分をうまく処理できません。SO に関する他の投稿を見て、Adobe のサイトを確認しましたが、まだ問題がいくつかあります。
サーバーで接続を受け入れた後、<policy-file-request/>.
I'm using the following XML policy file が表示されます。
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" to-ports="*"/>
</cross-domain-policy>
ファイル全体を char 配列に入れ、リクエストを受け取ったのと同じポート (843 ではなくカスタム ポートを使用しています) から書き出すだけです。ゼロバイトで終わると思われることを読みました(これは NULL または '\0' を意味しますか?)。この部分を乗り越えることができないようです。
私のクライアント側には、次のようなソケットイベントリスナーがあります
sock.addEventListener(ProgressEvent.SOCKET_DATA, sockFunc);
しかし、イベントが発生することはありません。
問題を悪化させるために、Chrome は Flash デバッグの使用を好まないようです。IE または FF を使用すると、サーバーは recv でブロックするだけで、<policy-file-request/>
. IE と FF では、ポート 843 を試行してからあきらめると思いますか? ポリシー ファイルをカスタム ポート経由で送信しようとするのは悪い習慣ですか?
どんな助けでも本当に感謝します。私は本当にここで立ち往生しています:(
EDIT:最後にゼロバイトを追加すると、サーバーは接続を受け入れ、ポリシーリクエストを読み取り、ソケットを介してポリシーファイルを書き込み、再度受け入れてrecvでブロックします. 現在、1 つのクライアントのみを接続しようとしているため、Accept はブロックされているはずです。ポリシーファイルが正しく受信された後、クライアントは新しいファイル記述子で再接続することを想定していますか? クライアントでサーバーに書き込もうとしています
sock.writeUTFBytes("Hello");
sock.flush();
しかし、recv がブロックされているため、明らかにそこに到達することはありません。