这个问题快把我逼疯了!我读了了 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 应用程序后,我的服务器会看到请求,但连接已关闭。这就像客户忘记进行冲洗一样。
有人能告诉我如何正确解决这个问题吗?