私は既にこの質問をしている人が多いと知っていますが、私が読んだすべてのスレッドでは、私の問題に対して1つの解決策を見つけることができませんでした私のために働かなかった)。Java <->フラッシュソケット - ポリシーファイルの問題
タイトルが言うように、私はFlash/SWF-Applicationから、ソケットを介して書いた小さなJavaサーバーに接続しようとしています。 (同じマシン上で)オフラインで正常に動作しますが、.swfをWebスペースに配置してそこから開くとすぐに、Flashはサーバーからポリシーファイルを要求します。何も悪いことはありませんが、私の問題は、Flashが(うまくいけば)ポリシーファイルを取得した後に切断されますが、再接続しないことです。
クライアントが接続すると、私のサーバは常に新しいスレッドを開きますが、問題が発生した場所ではありません。私はすでに新しいスレッドを開かずに試しました。
は、ここに私のコードです:
while (true) {
connection = providerSocket.accept();
System.out.println("Incoming connection from " +
connection.getInetAddress().getHostName());
BufferedReader in = new BufferedReader(
new InputStreamReader(connection.getInputStream()));
String request = in.readLine();
if (request != null && request.contains("<policy-file-request/>")) {
System.out.println("Authorization request.");
PrintStream out = new PrintStream(connection.getOutputStream(), true);
out.println("<?xml version=\"1.0\"?><cross-domain-policy><!DOCTYPE cross-domain-policy SYSTEM \"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd\"><allow-access-from domain=\"*\" to-ports=\"3002\" /></cross-domain-policy>\u0000");
out.flush();
System.out.println("AuthData sent.");
connection.close();
System.out.println("Authorization complete.");
connection = providerSocket.accept();
System.out.println("TEST");
RequestProcessor c = new RequestProcessor(connection, connectionCounter++);
Thread t = new Thread(c);
t.start();
} else {
RequestProcessor c = new RequestProcessor(connection, connectionCounter++);
Thread t = new Thread(c);
t.start();
}
}
あなたはきっと、私が代わりに「\ 0」の末尾には「\ U0000」を使用していていることがわかりますが、私もそのような場合をテストし、心配しないで、のdidn何も変えない。 :/
私は新しい接続を取得しないため、私は "テスト"にも達しません。そして、自分で接続を閉じることができない場合、フラッシュは自動的に私の接続を切断します。
私が最後に試したのは、何のリクエストもせずにxmlを送信することでした(接続が確立された後、最初は正しい)。私は "recvが失敗しました" - そのエラー。
PS:のRequestProcessorは...私を助けるため
おかげで、私はmy.swf-ファイルから送信された文字列/コマンドを処理している私の新しいスレッド、です! :)