Android 两个设备之间的LAN不工作

Android 两个设备之间的LAN不工作,android,actionscript-3,flash,air,rtmfp,Android,Actionscript 3,Flash,Air,Rtmfp,我已经编写了一个简单的AS3程序来创建不同设备之间的无服务器P2P LAN连接。以下是它的要点: 客户端: private function initLan():void { //G is a class with two static variables - netConnection and netGroup G.netConnection = new NetConnection(); G.netConnection.addEvent

我已经编写了一个简单的AS3程序来创建不同设备之间的无服务器P2P LAN连接。以下是它的要点:

客户端:

private function initLan():void 
    {
        //G is a class with two static variables - netConnection and netGroup
        G.netConnection = new NetConnection();
        G.netConnection.addEventListener(NetStatusEvent.NET_STATUS, setupLAN);
        G.netConnection.connect("rtmfp:");
    }

    private function setupLAN(e:NetStatusEvent):void
    {
        trace(e.info.code);
        switch (e.info.code)
        {
            case "NetGroup.Connect.Failed": 
            case "NetGroup.Connect.Rejected": 
            case "NetConnection.Connect.Rejected": 
            case "NetConnection.Connect.Failed": 
                trace("There was a problem :/\n+" + e.info.code);
                break;

            case "NetConnection.Connect.Success": 
                trace("Setting up LAN group..");
                setupGroup();
                break;

            case "NetGroup.Connect.Success": 
                trace("LAN group successful!");

                //Start bind requests
                beginBindRequests();

                break;

            case "NetGroup.SendTo.Notify":
                var msg:Object = e.info.message;

                if (msg.type == "BIND RESPONSE") {
                    endBindRequests(); //See beginBindRequests();
                    G.netConnection.removeEventListener(NetStatusEvent.NET_STATUS, setupLAN);
                    G.netGroup.removeEventListener(NetStatusEvent.NET_STATUS, setupLAN);

                    //Connection established.
                }

                break;
        }
    }

    private function setupGroup():void
    {
        var groupspec:GroupSpecifier = new GroupSpecifier("LAN CONNECTION");
        groupspec.postingEnabled = true;
        groupspec.routingEnabled = true;
        groupspec.ipMulticastMemberUpdatesEnabled = true;
        groupspec.addIPMulticastAddress("225.225.0.1:30303");

        G.netGroup = new NetGroup(G.netConnection, groupspec.groupspecWithAuthorizations());
        G.netGroup.addEventListener(NetStatusEvent.NET_STATUS,setupLAN);
    }

    private function beginBindRequests():void 
    {
        function requestBind():void {
            G.netGroup.sendToAllNeighbors( { type:"BIND REQUEST" } );
        }

        //Code running requestBind() until endBindRequests() is called
    }
private function initLAN():void
    {
        //G is a class with two static variables - netConnection and netGroup
        G.netConnection = new NetConnection();
        G.netConnection.addEventListener(NetStatusEvent.NET_STATUS, setupLAN);
        G.netConnection.connect("rtmfp:");
    }

    private function setupLAN(e:NetStatusEvent):void
    {
        switch (e.info.code)
        {
            case "NetGroup.Connect.Failed": 
            case "NetGroup.Connect.Rejected": 
            case "NetConnection.Connect.Rejected": 
            case "NetConnection.Connect.Failed": 
                trace("There was a problem :/\n+" + e.info.code);
                break;

            case "NetConnection.Connect.Success": 
                trace("Setting up LAN group..");
                setupGroup();
                break;

            case "NetGroup.Connect.Success": 
                trace("LAN group successful!");

                //Add hot controller function
                G.netConnection.addEventListener(NetStatusEvent.NET_STATUS, bindResponses);
                G.netGroup.addEventListener(NetStatusEvent.NET_STATUS, bindResponses);

                G.netGroup.removeEventListener(NetStatusEvent.NET_STATUS, setupLAN);
                G.netConnection.removeEventListener(NetStatusEvent.NET_STATUS, setupLAN);
                break;
        }
    }

    private function setupGroup():void
    {
        var groupspec:GroupSpecifier = new GroupSpecifier("LAN CONNECTION");
        groupspec.postingEnabled = true;
        groupspec.routingEnabled = true;
        groupspec.ipMulticastMemberUpdatesEnabled = true;
        groupspec.addIPMulticastAddress("225.225.0.1:30303");

        G.netGroup = new NetGroup(G.netConnection,groupspec.groupspecWithAuthorizations());
        G.netGroup.addEventListener(NetStatusEvent.NET_STATUS, setupLAN);
    }

    private function bindResponses(e:NetStatusEvent):void
    {
        detailText.text = e.info.code;
        switch (e.info.code)
        {
            case "NetGroup.SendTo.Notify":
                if (e.info.message.type == "BIND REQUEST")
                {
                    //Send bind response
                    G.netGroup.sendToNearest({type: "BIND RESPONSE"}, e.info.from);
                }
                break;
        }
    }
服务器:

private function initLan():void 
    {
        //G is a class with two static variables - netConnection and netGroup
        G.netConnection = new NetConnection();
        G.netConnection.addEventListener(NetStatusEvent.NET_STATUS, setupLAN);
        G.netConnection.connect("rtmfp:");
    }

    private function setupLAN(e:NetStatusEvent):void
    {
        trace(e.info.code);
        switch (e.info.code)
        {
            case "NetGroup.Connect.Failed": 
            case "NetGroup.Connect.Rejected": 
            case "NetConnection.Connect.Rejected": 
            case "NetConnection.Connect.Failed": 
                trace("There was a problem :/\n+" + e.info.code);
                break;

            case "NetConnection.Connect.Success": 
                trace("Setting up LAN group..");
                setupGroup();
                break;

            case "NetGroup.Connect.Success": 
                trace("LAN group successful!");

                //Start bind requests
                beginBindRequests();

                break;

            case "NetGroup.SendTo.Notify":
                var msg:Object = e.info.message;

                if (msg.type == "BIND RESPONSE") {
                    endBindRequests(); //See beginBindRequests();
                    G.netConnection.removeEventListener(NetStatusEvent.NET_STATUS, setupLAN);
                    G.netGroup.removeEventListener(NetStatusEvent.NET_STATUS, setupLAN);

                    //Connection established.
                }

                break;
        }
    }

    private function setupGroup():void
    {
        var groupspec:GroupSpecifier = new GroupSpecifier("LAN CONNECTION");
        groupspec.postingEnabled = true;
        groupspec.routingEnabled = true;
        groupspec.ipMulticastMemberUpdatesEnabled = true;
        groupspec.addIPMulticastAddress("225.225.0.1:30303");

        G.netGroup = new NetGroup(G.netConnection, groupspec.groupspecWithAuthorizations());
        G.netGroup.addEventListener(NetStatusEvent.NET_STATUS,setupLAN);
    }

    private function beginBindRequests():void 
    {
        function requestBind():void {
            G.netGroup.sendToAllNeighbors( { type:"BIND REQUEST" } );
        }

        //Code running requestBind() until endBindRequests() is called
    }
private function initLAN():void
    {
        //G is a class with two static variables - netConnection and netGroup
        G.netConnection = new NetConnection();
        G.netConnection.addEventListener(NetStatusEvent.NET_STATUS, setupLAN);
        G.netConnection.connect("rtmfp:");
    }

    private function setupLAN(e:NetStatusEvent):void
    {
        switch (e.info.code)
        {
            case "NetGroup.Connect.Failed": 
            case "NetGroup.Connect.Rejected": 
            case "NetConnection.Connect.Rejected": 
            case "NetConnection.Connect.Failed": 
                trace("There was a problem :/\n+" + e.info.code);
                break;

            case "NetConnection.Connect.Success": 
                trace("Setting up LAN group..");
                setupGroup();
                break;

            case "NetGroup.Connect.Success": 
                trace("LAN group successful!");

                //Add hot controller function
                G.netConnection.addEventListener(NetStatusEvent.NET_STATUS, bindResponses);
                G.netGroup.addEventListener(NetStatusEvent.NET_STATUS, bindResponses);

                G.netGroup.removeEventListener(NetStatusEvent.NET_STATUS, setupLAN);
                G.netConnection.removeEventListener(NetStatusEvent.NET_STATUS, setupLAN);
                break;
        }
    }

    private function setupGroup():void
    {
        var groupspec:GroupSpecifier = new GroupSpecifier("LAN CONNECTION");
        groupspec.postingEnabled = true;
        groupspec.routingEnabled = true;
        groupspec.ipMulticastMemberUpdatesEnabled = true;
        groupspec.addIPMulticastAddress("225.225.0.1:30303");

        G.netGroup = new NetGroup(G.netConnection,groupspec.groupspecWithAuthorizations());
        G.netGroup.addEventListener(NetStatusEvent.NET_STATUS, setupLAN);
    }

    private function bindResponses(e:NetStatusEvent):void
    {
        detailText.text = e.info.code;
        switch (e.info.code)
        {
            case "NetGroup.SendTo.Notify":
                if (e.info.message.type == "BIND REQUEST")
                {
                    //Send bind response
                    G.netGroup.sendToNearest({type: "BIND RESPONSE"}, e.info.from);
                }
                break;
        }
    }
当在同一台PC上运行两个编译后的SWF实例时,这可以正常工作,但当客户端运行在手机上(使用AIR打包-是,设置了
)和服务器运行在PC上(也作为AIR应用程序)时,这不起作用。
setupLan()
上跟踪
e.info.code
表明,当在不同的设备中时,这两个实例甚至不“看到”对方(
NetGroup.Neighbor.Connect
从未触发)编辑:我已经测试过,两台运行客户端/服务器AIR应用程序的电脑也看不到对方
最糟糕的是,相同的代码(尽管在不同的FlashDevelop项目中)曾经工作过,这表明它可以工作。以某种方式我完全感到困惑和沮丧。帮助求你了



注:如果可能的话(我开始怀疑不是这样),一个不涉及路由器/防火墙设置的解决方案将是非常受欢迎的,因为大多数最终用户不会使用应用程序到那种程度。另外,我测试了两个不同的路由器,问题依然存在。

结果表明问题出在计算机本身,而不是编码或部署。LAN创建正确,只是在错误的网络上。按照中的步骤解决问题