1. 程式人生 > >如何給Flash的Socket驗證提供crossdomain.xml檔案服務埠

如何給Flash的Socket驗證提供crossdomain.xml檔案服務埠

 如果你不是對Actionscript 3的socket或者xmlsocket有研究的話,請忽略此文。

Flash 9的某個版本之後,socket的連線低埠需要一個domain認證才可以訪問低埠。當然,這是由於瀏覽器本身的sandbox的安全性的問題。按下不表,就說如何提供xmlsocket://這樣的服務埠的問題。

直接貼程式碼,實際上flash訪問這個埠也是用的tcp連線,所以我們可以創立一個tcplistener來做這件事情,然後當有請求到這裡的時候,把crossdomain.xml以二進位制方式非同步回寫過去才可以。同步方法則肯定會有問題。

程式碼如下:

while (true)
                {
                    try
                    {
                        if(_mainListener.Pending())
                        {
                            Socket s = _mainListener.AcceptSocket();

                            if(_bytebuffer!=null)
                            {
                                s.BeginSend(_bytebuffer, 0, _bytebuffer.Length, SocketFlags.None, new AsyncCallback(CloseSocket), s);
                            }
                        }
                    }
                    catch (Exception e)//如果出現異常則打控制檯列印到螢幕
                    {
                        string test = e.Message;
                    }
                    Thread.Sleep(100);

然後在非同步呼叫的callback裡關閉這個socket

private void CloseSocket(IAsyncResult ar)
        {
            if(ar.IsCompleted)
            {
                Socket workingsock = ar.AsyncState as Socket;

                workingsock.Shutdown(SocketShutdown.Send);

                workingsock.Close();
            }

        }

這樣就可以確保每次請求認證過來都是可以得到及時的應答的。