この問題は私を夢中にさせています!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 アプリケーションを閉じると、サーバーはリクエストを認識しますが、接続は閉じられます。クライアントがフラッシュを忘れているようなものです。
この問題を正しく解決する方法を教えてもらえますか?