我正在尝试让一个相当简单的 Flash 游戏与 php 套接字一起工作。截至目前,我正在使用仅允许用户互相聊天的套接字进行测试。这将在我的个人机器上运行,只能从 IDE 运行。如果我尝试运行 SWF 或 .html,则不行。我知道人们在使用 PhP、C#、C++、HTML 等方面处于边缘,但我真的想坚持使用 php,因为我使用的主机将支持这一点,最终我将获得足够的经验来深入了解套接字服务器。
所以我的问题是我大部分时间都在工作。如果我在 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 服务器连接失败!
这很好,除了跳过 Started!(不确定为什么)
当我从 SWF 或 HTML Inside 运行时连接到服务器
这就是发生的一切。我在消息中添加了以准确跟踪代码何时跳转的位置。在我的发布设置中,我确实将其设置为使用网络文件,我也尝试过使用本地文件。
使用网络文件,SWF 将输出 Inside connect To Server
使用本地文件,它不会输出任何东西。
如果有人能解释这一点或帮助我,我将不胜感激。
好的,所以我们取得了一些小的进展。它现在将在机器上运行,让我们开始!内部连接到服务器,然后大约 10-15 秒后弹出安全错误。
我们在 9999 上运行它,但我听说端口 843 和安全错误有些奇怪,有什么方法可以调试这个错误?我们只有在尝试使用 PhP Socket 从实际服务器运行它时才能得到它。
如果我在我的个人机器上运行 swf,我仍然没有通过 Started!并且无论我等待多长时间,都可以在内部连接到服务器