c# - AS3 套接字和策略文件请求到 C# 服务器

标签 c# actionscript-3 flash sockets policy

这个问题快把我逼疯了!我已经阅读了 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 脚本关闭连接(没问题),但它永远不会重新连接。

我曾尝试将其放入 AS3 之前 connect():

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

但是当我执行 connect() 时,它会卡住并且从不请求策略文件。在我关闭 AS3 应用程序后,我的服务器看到了请求,但连接已关闭。这就像客户忘记冲水一样。

谁能告诉我如何正确解决这个问题?

最佳答案

3 天后,我终于发现了代码中的错误。

50 点的赏金,但没有人注意到它:-(

很笨,新手错误:

当 Flash 应用程序请求策略文件时,不发送换行符,而是发送终止符 '\0'。

我正在阅读 read.ReadLine();一直读到 '\n',所以它卡住了。

谢谢大家的回复。

关于c# - AS3 套接字和策略文件请求到 C# 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15977859/

相关文章:

flash - 如何判断.swf产生了什么错误?

ios - 将编码的 .mp3 保存到 applicationStorageDirectory Adob​​e Air iOS

c# - DevExpress XtraReports绝对值

arrays - 将对象数组转换为数组数组

javascript - 使用 firefox 在 mac 上右键单击 flash 应用程序会触发 mousedown

actionscript-3 - RTS 游戏的声音管理器

c# - 为什么通用列表索引器显示两种行为

javascript - 在MVC中处理错误而无需重定向和页面刷新

C# 用泛型重载 : bug or feature?

html - 我的网站加载有问题。这是嵌入到 index.html 中的 .SWF 文件