AS3 で Java サーバーに接続できない
-
24-10-2019 - |
質問
AS3 の XMLSocket スクリプトで問題が発生しています。Java サーバーがあり、XML データを送信しようとしていますが、サーバーは何も受信しません。最も驚くべきことは、私のスクリプトは 1 か月前には非常にうまく機能していましたが、今では IOError リスナーが次のように返してくれることです。
「エラー #2031:ソケットエラー。URL:127.0.0.1 at test()at client_fla :: maintimeline/frame1() "
そして私の SecurityError リスナー:
「エラー #2048:セキュリティ サンドボックス違反:file:///C|/Documents%20and%20Settings/Zeph/Bureau/Client.swf は 127.0.0.1:18000 からデータをロードできません。aT test()at Client_fla :: maintimeline/frame1() "
IP を変更しようとしたり、別のコンピューターで試してみたり、変更されていない以前のバージョンのスクリプトをプルしようとしたりしましたが、結果は得られませんでした。
なぜこのように機能しなくなったのか理解できません。これが私のスクリプトです:
package
{
import flash.net.XMLSocket;
import flash.events.*;
import flash.display.MovieClip;
public class test extends MovieClip
{
public function test()
{
trace("pouet");
var xmlsock:XMLSocket = new XMLSocket();
xmlsock.connect("127.0.0.1", 18000);
var xmlFormattedData = new XML('<message pseudo="Nix" value="Coucou !"/>');
xmlsock.send(xmlFormattedData);
xmlsock.addEventListener(DataEvent.DATA, onData);
xmlsock.addEventListener(IOErrorEvent.IO_ERROR, ioerror);
xmlsock.addEventListener(SecurityErrorEvent.SECURITY_ERROR, secuerror);
xmlsock.send(xmlFormattedData);
}
private function onData(event:DataEvent):void
{
trace("[" + event.type + "] " + event.data);
}
private function ioerror(event:IOErrorEvent):void
{
trace(event);
}
private function secuerror(event:SecurityErrorEvent):void
{
trace(event);
}
}
}
これには腹が立っているのですが、誰かアイデアはありますか?
読んでくれてありがとう!
解決
このエラーは、ローカル ファイル システムからフラッシュ アプリケーションを実行しており、このアプリケーションが (Java サーバーに対して) ネットワーク リクエストを作成しようとしていることを示しています。
これはデフォルトでは許可されていません。次の 2 つのうちの 1 つを行うことができます。
Flash プレーヤーでグローバル セキュリティ設定を更新します (右クリックして詳細設定、グローバル セキュリティ設定を選択し、フラッシュ ファイルまたはフォルダー全体をネットワーク リクエストの実行を許可するように設定します)。
Web サーバーから Flash アプリケーションを実行します (そして、crossdomain.xml が Java サーバー上に存在することを確認してください)。
他のヒント
エラーが示しているように、サンドボックスのセキュリティ違反が発生しています。これは、Flash が独自のアプリケーション ドメイン以外のアセットを許可しないことを意味します。基本的に 2 つの修正があり、1 つはもう 1 つよりもはるかに簡単です。
作成とロードの方法を読む クロスドメイン XML. 。これは、実行中のフラッシュ アプリケーションが読み取るサーバー上の単なる「ポリシー」です。正しく設定するのは難しい場合がありますが、これが一般的に受け入れられているルートです。
出力設定の「ローカル再生セキュリティ」で、「ローカル ファイルのみにアクセスする」ではなく「ネットワーク ファイルにアクセスする」にチェックを入れると、問題をすぐに解決できる場合があります。
お役に立てば幸いです!