0

我正在尝试让一个相当简单的 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!并且无论我等待多长时间,都可以在内部连接到服务器

4

1 回答 1

0

触发事件的原因是端口SecurityError上没有。Flash Player 尝试连接到 843 端口并请求跨域文件。但是如果该文件不存在或不正确,则FP 会触发。crossdomain file843SecurityError

于 2012-12-23T05:32:32.953 回答