5

この問題は私を夢中にさせています!Stack Overflow に関するすべての質問を読みましたが、まだ行き詰っています。

私の as3 プログラムは非常にうまく機能しますが、完成してサーバーに置くと、この有名なポリシー ファイルを要求し始めます。

AS3 スクリプト:

socket.addEventListener(Event.CONNECT, onConnect);
socket.addEventListener(Event.CLOSE, onClose);
socket.addEventListener(IOErrorEvent.IO_ERROR, onError);
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecError);
socket.addEventListener(ProgressEvent.SOCKET_DATA, onResponse);

socket.connect( MYHOST, 4242 );

C# サーバー コード:

TcpListener serverSocket = new TcpListener(4242);
TcpClient clientSocket = default(TcpClient);
serverSocket.Start();
clientSocket = serverSocket.AcceptTcpClient();
NetworkStream networkStream = clientSocket.GetStream();
StreamReader read = new StreamReader(networkStream, Encoding.UTF8);
StreamWriter write = new StreamWriter(networkStream, Encoding.UTF8);

response = read.ReadLine();

if (response.Contains("policy"))
{
 write.Write("<?xml version=\"1.0\"?><cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"*\" /></cross-domain-policy>\0");
 write.Flush();
 clientSocket.Close();
 return;
}

そのため、AS3 がデフォルト ポート 843 (または同様のもの) でポリシーを見つけられない場合、接続と同じソケットで直接要求します。私の C# コードは要求と応答を認識し、その後 AS3 スクリプトは接続を閉じます (これは問題ありません) が、再接続はしません。

connect() のにこれを AS3 に入れようとしました。

Security.loadPolicyFile( "xmlsocket://myhost.com:4242");

しかし、私がそうするconnect()と、単に動かなくなり、ポリシーファイルを要求しません。AS3 アプリケーションを閉じると、サーバーはリクエストを認識しますが、接続は閉じられます。クライアントがフラッシュを忘れているようなものです。

この問題を正しく解決する方法を教えてもらえますか?

4

2 に答える 2