2012-12-22 29 views
0

我想获得一个相当简单的flash游戏来使用php套接字。到目前为止,我正在使用允许用户与海誓山盟聊天的套接字进行测试。这将在我的个人计算机上运行,​​只能从IDE中运行。如果我尝试运行SWF或.html,请不要去。我知道人们在使用PhP vs C#vs C++ vs HTML等方面处于边界,但我真的想坚持使用php,因为我使用的托管将支持这一点,并且最终我将有足够的经验去深入研究socket服务器。PHP5套接字服务器闪存

所以我的问题是,我有它的工作主要是。如果我在Flash CS5中进行测试(Ctrl + Enter),它将运行痕迹和一切,并在无法连接时停止,这是我的预期。但是,当我从SWF或HTML运行它时,它甚至不会初始化。下面的代码将会使这个多一点明确

import flash.net.*; 
import fl.controls.*; 
import flash.events.MouseEvent; 
import flash.events.DataEvent; 
import flash.events.SecurityErrorEvent; 

var mySocket = new XMLSocket(); 
pushMsg.addEventListener(MouseEvent.CLICK, realsedButton); 
//mySocket.connect("192.124.5.2",9999); 
mySocket.addEventListener(Event.CONNECT, xmlsocket); 
mySocket.addEventListener(Event.CLOSE, xmlsocket); 
mySocket.addEventListener(IOErrorEvent.IO_ERROR, xmlsocket); 
mySocket.addEventListener(DataEvent.DATA, dataHandler); 
mySocket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityHandler); 

msgArea.htmlText = "Started!"; 
connectToServer(); 
function connectToServer() 
{ 
    msgArea.htmlText = "Inside connect To Server"; 
    mySocket.connect("localhost",9999); 
} 

function securityHandler(evt: SecurityErrorEvent) 
{ 
    msgArea.htmlText = "SecurityError"; 
} 

function dataHandler(evt:DataEvent) 
{ 
    trace("Inside dataHandler") 
    var xml = XML(evt.target.data); 
    msgArea.htmlText += xml; 
} 


function xmlsocket(Event) 
{ 
    msgArea.htmlText += "inside xmlSocket"; 
    switch(Event.type) 
    { 
     case 'ioError': 
      msgArea.htmlText += "Inside dataHandler"; 
      msgArea.htmlText += "<b>Server connection failed!</b>"; 
      break; 

     case 'connect': 
      msgArea.htmlText +="Inside Connect"; 
      msgArea.htmlText += "<b>Server connection establed!</b>"; 
      break; 

     case 'close': 
      msgArea.htmlText +="Inside Close"; 
      msgArea.htmlText += "<b>Server connection lost</b>"; 
      break; 
    } 
} 
function msgGO() 
{ 
    msgArea.htmlText +="Inside msgGO"; 
    if (inputMsg.htmlText != "") 
    { 
     msgArea.htmlText +="Inside msgGo2"; 
     mySocket.send(inputMsg.htmlText+"\n"); 
     inputMsg.htmlText = ""; 
    } 
} 

function realsedButton(evt:MouseEvent) 
{ 
    msgArea.htmlText +="Inside ReleasedButton"; 
    msgGO(); 
} 

所以,当我运行这个从IDE它输出: 内部连接到服务器 内的XMLSocket 里面的DataHandler 服务器连接失败!

哪个好,除了跳过开始! (不确定为什么)

当我运行这个从SWF或HTML 内部连接到服务器

这就是所发生的一切。我在消息中添加了跟踪代码跳转时的确切位置。在我的发布设置中,我将它设置为使用网络文件,我也尝试了使用本地文件。

使用网络文件,SWF文件将输出 内部连接到服务器

使用本地文件,也不会输出任何东西。

如果有人能解释这个或帮助我,我将不胜感激。

好的,所以我们取得了一些小的进展。它现在将在机器上运行,给我们启动!内连接到服务器,然后安全错误约10-15秒后弹出。

我们在9999上运行这个,但我听说有关于端口843和安全错误的任何琐事,任何方式来调试此错误?我们只有在尝试使用PhP套接字从实际服务器运行它时才会得到它。

如果我在我的个人电脑上运行swf,我仍然不会通过开始!和内部连接到服务器无论等待多长时间

+0

跳过“Started!”的原因是因为在'msgArea.htmlText =“内部连接到服务器”;',你使用'='而不是'+ ='。 – icktoofay

+0

呵呵呵呵,谢谢你的收获! :) –

+0

你是在两台机器之间测试还是在相同的? – ethrbunny

回答

0

发生的原因SecurityError事件是一个没有crossdomain file端口843。 Flash Player尝试连接到843端口并请求跨域文件。但是如果这个文件不存在,或者不正确,FP解雇SecurityError