【问题标题】:Flash10-ActionScript3:Can not connect to socket serverFlash10-ActionScript3:无法连接到套接字服务器
【发布时间】:2013-08-09 06:54:00
【问题描述】:

我写的C#代码已经在本地服务器端运行了。

System.Net.Sockets.Socket server = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp);
server.Bind(new System.Net.IPEndPoint(System.Net.IPAddress.Any, 4502));
server.Listen(int.MaxValue);
while (true)
{
    System.Net.Sockets.Socket client = server.Accept();
    if (client.Connected)
        client.Send(new byte[1]);
}

然后在本地网页上构建一个嵌入html文件的swf文件——127.0.0.1/Socket.htm

public class WebSocket extends flash.display.Sprite
{
    private var Socket:flash.net.Socket = new flash.net.Socket();

    public function WebSocket()
    {
        flash.system.Security.allowDomain("*");
        flash.system.Security.allowInsecureDomain("*");
        flash.system.Security.loadPolicyFile("PolicyFile.xml");
        this.Socket.addEventListener( flash.events.Event.CONNECT, Socket_Connect );
        this.Socket.connect("127.0.0.1",4502);
    }

    private function Socket_Connect(event:Event):void
    {
        this.MyLabel.text= "The socket is now connected..." ; 
    }
}

这里是“127.0.0.1/PolicyFile.xml”的内容:

<?xml version="1.0" encoding="utf-8"?>
<cross-domain-policy>
    <allow-access-from domain="*" />
</cross-domain-policy>

代码运行没有任何错误,但从未触发 CONNECT 事件。

提前感谢您的帮助!

【问题讨论】:

    标签: flash sockets actionscript


    【解决方案1】:

    来自 Flash 的套接字连接需要由同一主机提供的策略文件。 Flash Player 会自动尝试与目标计算机上的端口 843 建立套接字连接以获取策略文件。使用普通请求加载策略文件是不够的。

    您可以像这样指定不同的端口:

    Security.loadPolicyFile("xmlsocket://127.0.0.1:1843");
    

    您似乎在使用 .NET,这是您平台的策略服务器:http://policyserver.codeplex.com。 您也可以自己实现策略服务器。只需监听连接和输入字符串&lt;policy-file-request/&gt;\0。之后,输出 XML 并关闭套接字。 Flash Player 将继续建立连接。

    示例策略 XML:

    <?xml version="1.0"?>
    <!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">
    <cross-domain-policy>
     <site-control permitted-cross-domain-policies="master-only"/>
     <allow-access-from domain="*" to-ports="4502" />
    </cross-domain-policy>
    

    还请确保您侦听套接字上的所有相关事件(即SecurityErrorEvent.SECURITY_ERRORIOErrorEvent.IO_ERROREvent.CLOSEProgressEvent.SOCKET_DATA)。

    【讨论】:

      猜你喜欢
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      • 2023-02-08
      • 2018-11-29
      • 2016-03-10
      • 2015-11-14
      • 2021-02-18
      • 2018-03-15
      相关资源
      最近更新 更多