0

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 からこれを実行すると、次のように出力されます。 Inside connect To Server inside xmlSocket Inside dataHandler Server connection failed!

開始をスキップしていることを除けば、これは良いことです。(理由は不明)

これを SWF または HTML Inside connect To Server から実行すると、

それだけです。メッセージを追加して、コードがいつジャンプするかを正確に追跡しました。パブリッシュ設定で、[ネットワーク ファイルを使用] に設定しています。また、[ローカル ファイルを使用] も試しました。

ネットワーク ファイルを使用すると、SWF は Inside connect To Server を出力します。

ローカル ファイルを使用すると、何も出力されません。

誰かがこれを説明したり、私を助けてくれたりしたら、とても感謝しています。

さて、私たちはいくつかの小さな進歩を遂げました. マシン上で実行されるようになりました。内部でサーバーに接続すると、約 10 ~ 15 秒後にセキュリティ エラーが表示されます。

これを 9999 で実行していますが、ポート 843 とセキュリティ エラーに問題があると聞きました。このエラーをデバッグする方法はありますか? PhP ソケットを使用して実際のサーバーから実行しようとしている場合にのみ取得します。

個人のマシンで swf を実行しても、Started! に合格しません。どれだけ待っても内部でサーバーに接続します

4

1 に答える 1

0

SecurityErrorイベントを起動する理由はcrossdomain file、ポートに存在しないことです843。Flash Player が 843 ポートへの接続を試行し、クロスドメイン ファイルを要求しています。SecurityErrorただし、このファイルが存在しない場合、または正しくない場合はFPが発生します。

于 2012-12-23T05:32:32.953 に答える