}如果你不是对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();
}
}
这样就可以确保每次请求认证过来都是可以得到及时的应答的。