Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AIR android serversocket仅在ADL(AIR调试启动器)中工作_Android_Actionscript 3_Air - Fatal编程技术网

AIR android serversocket仅在ADL(AIR调试启动器)中工作

AIR android serversocket仅在ADL(AIR调试启动器)中工作,android,actionscript-3,air,Android,Actionscript 3,Air,我的问题是,我正在开发一个air应用程序,它通过serversocket(服务器)socket(客户端)彼此通信 当我在Air debug launcher中测试它时,一切都在服务器端工作(我可以从不同的internet连接看到服务器) 但当我尝试从Android设备托管时,它只能在LAN上工作(无法从不同的连接中看到托管服务器) 我的问题是为什么它可以在测试环境中工作,而不能在内置应用程序中工作。。苏很沮丧 这是我的服务器端代码: package AS { import flash.disp

我的问题是,我正在开发一个air应用程序,它通过serversocket(服务器)socket(客户端)彼此通信

当我在Air debug launcher中测试它时,一切都在服务器端工作(我可以从不同的internet连接看到服务器)

但当我尝试从Android设备托管时,它只能在LAN上工作(无法从不同的连接中看到托管服务器)

我的问题是为什么它可以在测试环境中工作,而不能在内置应用程序中工作。。苏很沮丧

这是我的服务器端代码:

package AS {

import flash.display.MovieClip;
import AS.Constants;
import flash.net.ServerSocket;
import flash.net.Socket;
import flash.events.ServerSocketConnectEvent;
import flash.events.ProgressEvent;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.KeyboardEvent;
import flash.text.TextFieldType;
import flash.net.SharedObject;
import fl.data.DataProvider;
import flash.net.URLRequest;
import flash.media.Sound;
import flash.desktop.NativeApplication;
import flash.desktop.SystemIdleMode;
import flash.text.TextFormat;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;

public class chatPage extends MovieClip {


    private var server:ServerSocket;
    private var clients:Vector.<Socket> = new Vector.<Socket>;
    private var clientUsernames:Array = new Array();
    private var autoScroll:Boolean=true;
    private var autoClean:Boolean=false;
    private var counter:int=900;
    private var soundwarn:Boolean=true;
    private var myformat:TextFormat=new TextFormat();



    public function chatPage(address:String="0.0.0.0",port:uint=8888):void {



        server = new ServerSocket();
        server.bind(port,address);
        server.addEventListener(ServerSocketConnectEvent.CONNECT, serverConnectHandler);
        server.listen();

        if(!server.listening){
            die();
            Constants.mainRef.initLoginScreen("not listening");
        }else if(!server.bound){
            die();
            Constants.mainRef.initLoginScreen("not bound");
        }

        myformat.color=0xffffff;
        client_list.setRendererStyle("textFormat",myformat);

        soundButton.gotoAndStop(1);

        chat_txt.text = String("");
        chat_txt.scrollV=chat_txt.maxScrollV;
        scrollBar.update();


        scrollBar.addEventListener(Event.SCROLL, scrollingListener);
        send_txt.addEventListener(KeyboardEvent.KEY_DOWN, commandHandler);
        autoClean_btn.addEventListener(Event.CHANGE, autoCleanHandler);


        soundButton.addEventListener(MouseEvent.CLICK, soundClickHandler);
        close_btn.addEventListener(MouseEvent.CLICK, closeHandler);

        kick_btn.addEventListener(MouseEvent.CLICK, kickHandler);
        ban_btn.addEventListener(MouseEvent.CLICK, banHandler);
        burn_btn.addEventListener(MouseEvent.CLICK, burnHandler);
        share_btn.addEventListener(MouseEvent.CLICK, shareHandler);
        scroll_down_btn.addEventListener(MouseEvent.CLICK, scrollDownHandler);

        preventSleep_check.addEventListener(Event.CHANGE, sleepChangeHandler);

    }
    private function burnHandler(e:MouseEvent):void {
        //burn all evidence for you and all your clients
        if(chat_txt.length > 0){
            send(4,Constants.mainRef.encrypt("burn"));

            chat_txt.text = String("");
            chat_txt.scrollV=chat_txt.maxScrollV;
            scrollBar.update();
        }
    }
    private function shareHandler(e:MouseEvent):void {
        //share the contents of your chat_txt to all your clients
        if(chat_txt.length > 0){
            send(5,Constants.mainRef.encrypt(chat_txt.text));
        }
    }
    private function banHandler(e:MouseEvent):void {
        var tempIpArr:Array = new Array();
        for (var i: uint = 0; i < clients.length; i++) {
            tempIpArr.push(clients[i].remoteAddress);
        }
        Constants.STAGE.addChild(new listDialog(clientUsernames, tempIpArr, this) ); 
    }
    private function sleepChangeHandler(e:Event):void{
        if(this.preventSleep_check.selected){
            NativeApplication.nativeApplication.systemIdleMode = SystemIdleMode.KEEP_AWAKE;
        }else{
            NativeApplication.nativeApplication.systemIdleMode = SystemIdleMode.NORMAL;
        }
    }
    private function kickHandler(e:MouseEvent):void {
        if(client_list.selectedIndex > -1){
            clients[client_list.selectedIndex].close();
            clients[client_list.selectedIndex].removeEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
            clients[client_list.selectedIndex].removeEventListener(Event.CLOSE, socketDisconnectHandler);
            clients.splice(client_list.selectedIndex,1);
            //send("▼"+clientUsernames[client_list.selectedIndex]);
            send(3,String(clientUsernames[client_list.selectedIndex]));
            clientUsernames.splice(client_list.selectedIndex,1);
            client_list.dataProvider = new DataProvider( clientUsernames );
        }   
    }
    public function remoteKick(index:uint):void{
        clients[index].close();
        clients[index].removeEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
        clients[index].removeEventListener(Event.CLOSE, socketDisconnectHandler);
        clients.splice(index,1);
        send(3,String(clientUsernames[index]));
        clientUsernames.splice(index,1);
        client_list.dataProvider = new DataProvider( clientUsernames );
    }
    private function scrollDownHandler(e:MouseEvent):void {
        autoScroll=true;
        chat_txt.scrollV=chat_txt.maxScrollV;
        scrollBar.update();
    }
    private function closeHandler(e:MouseEvent):void {
        die();
        Constants.mainRef.initLoginScreen("Chat room terminated!");
        //Constants.STAGE.addChild(new logInScreen("Chat room terminated!"));
    }
    private function soundClickHandler(e:MouseEvent):void {
        if(soundButton.currentFrame == 1){
            soundwarn=false;
            soundButton.gotoAndStop(2);
        }else{
            soundwarn=true;
            soundButton.gotoAndStop(1);
        }
    }

    private function autoCleanFrameListener(e:Event):void {
        if(autoClean){
            counter--;
            counter_txt.text = String( Math.floor( counter / 30 ) + "s" );
            if(counter <= 0){
                counter_txt.text = String("30s");
                chat_txt.text = String("");
                chat_txt.scrollV=chat_txt.maxScrollV;
                scrollBar.update();
                currentDataStr = String("");
                counter=900;
            }
        }
    }

    private function autoCleanHandler(e:Event):void {

            if(autoClean_btn.selected){
                autoClean=true;
                counter_txt.text = String("30s");
                this.addEventListener(Event.ENTER_FRAME, autoCleanFrameListener);
            }else{
                this.removeEventListener(Event.ENTER_FRAME, autoCleanFrameListener);
                autoClean=false;
                counter_txt.text = String("");
                counter=900;
            }

    }
    private function scrollingListener(e:Event):void {
        if(chat_txt.scrollV!=chat_txt.maxScrollV){
            autoScroll=false;
        }
    }
    private function serverConnectHandler(e:ServerSocketConnectEvent):void {
        var socket:Socket = e.socket;
        var banned:Boolean;
        if(Constants.banList.length > 0){
            for (var i: uint = 0; i < Constants.banList.length; i++) {
                if(Constants.banList[i] == socket.remoteAddress){
                    banned=true;
                    break;
                }else{
                    banned=false;
                }
            }
        }else{
            banned=false;
        }

        if(!banned){

            clients.push(socket);
            clients[clients.length-1].addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
            clients[clients.length-1].addEventListener(Event.CLOSE, socketDisconnectHandler);
            send(2,Constants.mainRef.encrypt(Constants.mainRef.username));

        }else{
            socket.close();
        }
    }


    private function socketDisconnectHandler(e:Event):void {
        send(3,Constants.mainRef.encrypt( clientUsernames[clients.indexOf(e.target)] ) );
        clientUsernames.splice(clients.indexOf(e.target),1);
        client_list.dataProvider = new DataProvider( clientUsernames );
        clients.splice(clients.indexOf(e.target),1);
        e.target.close();
        e.target.removeEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
        e.target.removeEventListener(Event.CLOSE, socketDisconnectHandler);
    }

    private var currentDataStr:String;
    private var currentDataType:uint;
    private function socketDataHandler(e:ProgressEvent):void {
        var socket:Socket = e.currentTarget as Socket;
        currentDataType = socket.readUnsignedInt();
        currentDataStr = socket.readUTFBytes(socket.bytesAvailable);


        send(currentDataType, currentDataStr);
        if(currentDataType == 1){
            chat_txt.appendText(Constants.mainRef.decrypt(currentDataStr) );
            if(autoScroll){
                chat_txt.scrollV=chat_txt.maxScrollV;
            }
            scrollBar.update();
            if(soundwarn){
                //give sound warning
                var snd:Sound = new Sound(new URLRequest("sound/ding.mp3")); 
                snd.play();
            }
        }else if(currentDataType == 2){
            var tempString:String = Constants.mainRef.decrypt(currentDataStr);
            clientUsernames.push(tempString);
            client_list.dataProvider = new DataProvider( clientUsernames );
        }

        tempString=String("");
        currentDataStr=String("");
        currentDataType=0;
    }



    private function commandHandler(e:KeyboardEvent):void {
        if(e.keyCode==13){
        //ENTER GOT PRESSED
            var commandStr:String = send_txt.text;
            if(commandStr.indexOf(".") == 0){
                if(commandStr.indexOf(".del") > -1 ){
                    chat_txt.text = String("");
                    currentDataStr = String("");
                    chat_txt.scrollV=chat_txt.maxScrollV;
                    scrollBar.update();
                }else if(commandStr.indexOf(".burn") > -1 ){
                    if(chat_txt.length > 0){
                        send(4,Constants.mainRef.encrypt("burn"));
                        chat_txt.text = String("");
                        chat_txt.scrollV=chat_txt.maxScrollV;
                        scrollBar.update();
                    }
                }else if(commandStr.indexOf(".share") > -1 ){
                    if(chat_txt.length > 0){
                        send(5,Constants.mainRef.encrypt(chat_txt.text));
                    }
                }else if(commandStr.indexOf(".ip") > -1 ){
                    getIpOnline();
                }else if(commandStr.indexOf(".roll") > -1 ){
                    var rngMax:int = parseInt( commandStr.slice(commandStr.indexOf(" ")) );
                    if(rngMax > 0){
                        var rawString:String = Constants.mainRef.username + " rolled " + String(Constants.mainRef.randomNum(1,rngMax)) + " out of " + String(rngMax) + "\n";
                        send(1, Constants.mainRef.encrypt( rawString ) );
                        chat_txt.appendText( rawString );
                        if(autoScroll){
                            chat_txt.scrollV=chat_txt.maxScrollV;
                        }
                        scrollBar.update();
                    }

                }else if(commandStr.indexOf(".kick") > -1 && client_list.selectedIndex > -1){
                    clients[client_list.selectedIndex].close();
                    clients[client_list.selectedIndex].removeEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
                    clients[client_list.selectedIndex].removeEventListener(Event.CLOSE, socketDisconnectHandler);
                    clients.splice(client_list.selectedIndex,1);

                    send(3,Constants.mainRef.encrypt( clientUsernames[client_list.selectedIndex] ) );

                    clientUsernames.splice(client_list.selectedIndex,1);
                    client_list.dataProvider = new DataProvider( clientUsernames );
                }
            }else if(commandStr.length > 0){
                send(1, Constants.mainRef.encrypt(Constants.mainRef.username + ": " + commandStr + "\n"));
                chat_txt.appendText(Constants.mainRef.username + ": " + commandStr + "\n");
                if(autoScroll){
                    chat_txt.scrollV=chat_txt.maxScrollV;
                }
                scrollBar.update();
            }
            send_txt.text = String("");
            commandStr = String("");
            Constants.STAGE.focus = null;
        }
    }

    public function send(typeIndex:uint, data:String):void {
        for each(var client:Socket in clients){
            client.writeUnsignedInt(typeIndex);
            client.writeUTFBytes(data);
            client.flush();
        }
    }

    private function getIpOnline():void{
        var phpFileRequest:URLRequest = new URLRequest("https://api.ipify.org/");
        phpFileRequest.method = URLRequestMethod.GET;
        var phpLoader:URLLoader = new URLLoader();
        phpLoader.addEventListener(Event.COMPLETE, showResult);
        phpLoader.load(phpFileRequest);
    }
    private function showResult(e:Event):void{
        send_txt.text = String(e.target.data);
        e.target.removeEventListener(Event.COMPLETE, showResult);
    }

    public function die():void{
        var i:uint

        for(i = 0; i < clients.length; i++) {
            clients[i].close();
            clients[i].removeEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
            clients[i].removeEventListener(Event.CLOSE, socketDisconnectHandler);
        }
        server.removeEventListener(ServerSocketConnectEvent.CONNECT, serverConnectHandler);
        server.close();

        chat_txt.text = String("");
        send_txt.text = String("");
        kick_btn.removeEventListener(MouseEvent.CLICK, kickHandler);
        ban_btn.removeEventListener(MouseEvent.CLICK, banHandler);
        preventSleep_check.removeEventListener(Event.CHANGE, sleepChangeHandler);
        close_btn.removeEventListener(MouseEvent.CLICK, closeHandler);
        burn_btn.removeEventListener(MouseEvent.CLICK, burnHandler);
        share_btn.removeEventListener(MouseEvent.CLICK, shareHandler);
        scroll_down_btn.removeEventListener(MouseEvent.CLICK, scrollDownHandler);
        soundButton.removeEventListener(MouseEvent.CLICK, soundClickHandler);
        autoClean_btn.removeEventListener(Event.CHANGE, autoCleanHandler);
        this.removeEventListener(Event.ENTER_FRAME, autoCleanFrameListener);
        scrollBar.removeEventListener(Event.SCROLL, scrollingListener);
        send_txt.removeEventListener(KeyboardEvent.KEY_DOWN, commandHandler);


        clients.length=0;
        clientUsernames.length=0;
        if(Constants.cardIndexer.length > 0){
            for (i = 0; i < Constants.cardIndexer.length; i++) {
                Constants.cardIndexer[i].die(4);
            }
            Constants.cardIndexer.length=0;
            Constants.deckRef.length=0;
        }
        this.parent.removeChild(this);

    }

    private function chatText(texty:String,chat:Boolean=true):void{
        if(chat){
            send(1, Constants.mainRef.encrypt(Constants.mainRef.username + ": " + texty + "\n"));
            chat_txt.appendText(Constants.mainRef.username + ": " + texty + "\n");
            if(autoScroll){
                chat_txt.scrollV=chat_txt.maxScrollV;
            }
            scrollBar.update();
        }else{
            send(1, Constants.mainRef.encrypt(texty + "\n"));
            chat_txt.appendText(texty + "\n");
            if(autoScroll){
                chat_txt.scrollV=chat_txt.maxScrollV;
            }
            scrollBar.update();
        }
    }

}
打包为{
导入flash.display.MovieClip;
导入为常数;
导入flash.net.ServerSocket;
导入flash.net.Socket;
导入flash.events.ServerSocketConnectEvent;
导入flash.events.ProgressEvent;
导入flash.events.Event;
导入flash.events.MouseEvent;
导入flash.events.KeyboardEvent;
导入flash.text.TextFieldType;
导入flash.net.SharedObject;
导入fl.data.DataProvider;
导入flash.net.URLRequest;
导入flash.media.Sound;
导入flash.desktop.NativeApplication;
导入flash.desktop.SystemIdleMode;
导入flash.text.TextFormat;
导入flash.net.urloader;
导入flash.net.URLRequest;
导入flash.net.URLRequestMethod;
公共类聊天页扩展了MovieClip{
私有var服务器:ServerSocket;
私有var客户端:向量。=新向量。;
private var clientUsernames:Array=new Array();
私有变量autoScroll:Boolean=true;
私有变量自动清理:布尔值=false;
专用var计数器:int=900;
私有变量soundwarn:Boolean=true;
私有变量myformat:TextFormat=newtextformat();
公共函数聊天页(地址:String=“0.0.0.0”,端口:uint=8888):无效{
server=newserversocket();
绑定(端口、地址);
addEventListener(ServerSocketConnectEvent.CONNECT,serverConnectHandler);
server.listen();
如果(!server.listing){
模具();
常量.mainRef.initLoginScreen(“未侦听”);
}else如果(!server.bound){
模具();
常量.mainRef.initLoginScreen(“未绑定”);
}
myformat.color=0xffffff;
client_list.setRenderStyle(“textFormat”,myformat);
soundButton.gotoAndStop(1);
chat_txt.text=字符串(“”);
chat_txt.scrollV=chat_txt.maxsollv;
scrollBar.update();
scrollBar.addEventListener(Event.SCROLL,scrollingListener);
send_txt.addEventListener(KeyboardEvent.KEY_DOWN,commandHandler);
autoClean_btn.addEventListener(Event.CHANGE,autoCleanHandler);
soundButton.addEventListener(MouseEvent.CLICK,soundClickHandler);
close_btn.addEventListener(MouseEvent.CLICK,closeHandler);
kick_btn.addEventListener(MouseEvent.CLICK,kickHandler);
ban_btn.addEventListener(MouseEvent.CLICK,banHandler);
burn_btn.addEventListener(MouseEvent.CLICK,burnHandler);
share_btn.addEventListener(MouseEvent.CLICK,shareHandler);
向下滚动\u btn.addEventListener(MouseEvent.CLICK,scrollDownHandler);
preventSleep\u check.addEventListener(Event.CHANGE,sleepChangeHandler);
}
私有函数burnHandler(e:MouseeEvent):void{
//为你和你所有的客户烧掉所有的证据
如果(chat_txt.length>0){
发送(4,Constants.mainRef.encrypt(“burn”);
chat_txt.text=字符串(“”);
chat_txt.scrollV=chat_txt.maxsollv;
scrollBar.update();
}
}
私有函数shareHandler(e:MouseeEvent):void{
//将聊天内容分享给所有客户
如果(chat_txt.length>0){
发送(5,Constants.mainRef.encrypt(chat_txt.text));
}
}
私有函数banHandler(e:MouseEvent):void{
var tempIpArr:Array=new Array();
对于(变量i:uint=0;i-1){
客户机[client_list.selectedIndex].close();
客户机[客户机列表。selectedIndex].removeEventListener(ProgressEvent.SOCKET\u数据,socketDataHandler);
客户端[客户端列表。selectedIndex].removeEventListener(Event.CLOSE,socketDisconnectHandler);
clients.splice(client\u list.selectedIndex,1);
//发送(”▼"+客户端用户名[客户端列表.selectedIndex]);
发送(3,字符串(clientUsernames[client_list.selectedIndex]);
clientUsernames.splice(客户机列表,selectedIndex,1);
client_list.dataProvider=新的数据提供程序(clientUsernames);
}   
}
公共函数remoteKick(索引:uint):无效{
客户端[index].close();
客户端[索引].removeEventListener(ProgressEvent.SOCKET_数据,socketDataHandler);
客户端[索引].removeEventListener(Event.CLOSE,socketDisconnectHandler);
客户。拼接(索引,1);
发送(3,字符串(clientUsernames[index]);
clientUsernames.splice(索引,1);
client_list.dataProvider=新的数据提供程序(clientUsernames);
}
私有函数scrollDownHandler(e:MouseEvent):void{
autoScroll=true;
chat_txt.scrollV=chat_txt.maxsollv;
scrollBar.update();
}
私有函数closeHandler(e:MouseEvent):void{
模具();
常量.mainRef.initLoginScreen(“聊天室终止!”);
//常量.STAGE.addChild(新登录屏幕(“聊天室终止!”);
}
私有函数soundClickHandler(e:MouseeEvent):无效{
如果(