0

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]);
}

次に、ローカル Web ページの 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 イベントは発生しません。

事前に助けてくれてありがとう!

4

1 に答える 1

0

Flash からのソケット接続には、まったく同じホストによって提供されるポリシー ファイルが必要です。Flash Player は、ターゲット マシンのポート 843 へのソケット接続を自動的に確立して、ポリシー ファイルを取得しようとします。通常のリクエストでポリシー ファイルをロードするだけでは不十分です。

次のように別のポートを指定できます。

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

.NET を使用しているように見えるので、これはプラットフォームのポリシー サーバーです: http://policyserver.codeplex.com。ポリシー サーバーを自分で実装することもできます。接続と入力文字列をリッスンするだけ<policy-file-request/>\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_ERROR、、、、 ) をリッスンしていることを確認してください。IOErrorEvent.IO_ERROREvent.CLOSEProgressEvent.SOCKET_DATA

于 2013-08-13T09:45:35.647 に答える