Uni*_*rs3 5 c# sockets flash policy actionscript-3
这个问题让我抓狂!我已经阅读了有关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 );
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
因此,当AS3在默认端口843(或类似的东西)上找不到策略时,它直接在与连接相同的套接字上询问.我的C#代码看到请求和回复,之后AS3脚本关闭连接(这是正常的),但它永远不会重新连接.
我试过在connect()之前把它放在AS3中:
Security.loadPolicyFile( "xmlsocket://myhost.com:4242");
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,connect()它就会卡住并且永远不会请求策略文件.关闭AS3应用程序后,我的服务器会看到请求,但连接已关闭.就像客户忘记做同花顺一样.
有人能告诉我如何正确解决这个问题吗?
3天后,我终于发现了代码中的错误.
一个50分的赏金,没有人注意到它:-(
非常愚蠢,新手错误:
当flash应用程序请求策略文件时,不要发送换行符,而是终止char'\ 0'.
并且我正在阅读read.ReadLine(); 读到'\n',所以它卡住了.
谢谢大家的回复.
| 归档时间: |
|
| 查看次数: |
2996 次 |
| 最近记录: |