网游练习总结(2)

php获取js变量:document.write(string);

$name="
        <script type=‘text/javascript‘>
        document.write(getName());
            function getName(){
                var str=window.location.search;
                var args=str.split(‘?‘);
                 var retval=‘‘;
                 if(args[0]==str){return ‘‘;}//参数为空;
                 return args[1].split(‘=‘)[1];
                }
        </script>";
//其实这样是得到了变量,但也其实是一个啰嗦,可以直接用$_GET[‘KEY‘]得到。

AS3.0获取php变量

//------signClass-------
//加载目标php文件函数:
private function loaded(event:Event):void
        {
            if(this.data.strings)
            {
                var str:String=this.data.strings;
                var arr=this.data.strings.split("<br/>");

                trace(arr[0].split("name=")[1]);
                trace(arr[1].split("pasd=")[1]);
                trace(arr[2].split("mail=")[1]);
                trace(arr[3].split("sign=")[1]);

                if(arr[3].split("sign=")[1]=="succeed")
                {
                    this.isSign=true;
                    info=Singleton.GetSingleton(UserInfo as Class);
                    info.user_pswd=arr[1].split("pasd=")[1];
                    info.userEmail=arr[2].split("mail=")[1];
                    info.userName =arr[0].split("name=")[1];

                    this.father.SIGNED=this.father.STATES["succeed"];
                }else if(arr[3].split("sign=")[1]=="faild"){
                    trace("运行到此处");
                    this.isSign=false;
                    this.father.SIGNED=this.father.STATES["faild"];
                }else
                {
                    trace("unormal");
                    this.father.SIGNED=this.father.STATES["error"];
                }
            }

            //trace(this.isSign);
        }
$sql="SELECT * FROM chinesechess WHERE user_email=‘{$_email}‘and password=‘{$_paswd}‘ and isActivated=‘{$_activate}‘";
    $result = mysql_query($sql,$con);
    $source=mysql_fetch_array($result);

    if($source)
    {
         $sign="succeed";

         $name=$source[‘nickname‘];

         $pasd=$source[‘password‘];

         $mail=$source[‘user_email‘];

    }else
    {
         $sign="faild";

         $name="null";

         $pasd="null";

         $mail="[email protected]";

    }
        echo ‘strings=name=‘.$name.‘<br/>‘;
        echo ‘pasd=‘.$pasd.‘<br/>‘;
        echo ‘mail=‘.$mail.‘<br/>‘;
        echo ‘sign=‘.$sign.‘<br/>‘;

as3.0获取后台数据必须以后台输出的键值对的明文来获取。

php获取AS3.0变量

/*
         *@function :  public   signClass  构造函数
         *@parameter:
         *  path      String    php文件路径
         *  obj       Main      Main类
         *  email     String    邮件字符串    "NULL"
         *  password  String    密码字符串    "1234"
         */
        public function signClass(path:String,obj:Sign_mc,email:String="NULL",password:String="1234")
        {
            this.father=obj;

            _var=new URLVariables();
            request=new URLRequest(path);
            request.method=URLRequestMethod.POST;

            _var._email=email;
            _var._pasd=password;

            request.data=_var;
            this.dataFormat = URLLoaderDataFormat.VARIABLES;
            this.load(request);
            this.addEventListener(Event.COMPLETE,loaded);
            //trace(password);
        }

AS3.0客户端通过 URLVariables对象就值以URLRequest的method=URLRequestMethod.POST方法发送给php,php端直接使用$_POST[‘_email‘]获取到就OK。

phpMyAdmin中设置主键和A_I:在新建数据表里面其实就可以设置A_I,但是好像并没有找到设置主键的钥匙按钮,后来才发现是我的数据里面的[结构]那一栏不知道为什么总是打不开,偶然打开了一次,设置主键的按钮在这一栏中,真是害得我好苦。然后就是不知道怎么处理数据插入失败后再次插入成功的时候主键增长的时候回将失败的次数也计算在里面,最后我在php端直接将失败的的操作该屏蔽掉了才解决了这个问题,但我想应该有更好的办法吧。

二.服务器端:

游戏服务器其实是我借用别人的,只是在基础上根据自己需要修改了一些。

1.swf客户端连接到服务端:相信swf客户端连接到服务端好多人都很头疼,我在好几个flash群里面遇到过好多关于安全沙箱问题,以及socket连接。其实只要安全策略文件配置正确一般都没有问题,还有会提示打开843端口的情况,是本地默认关闭这个端口造成的。在 本地防火墙->高级设置->进站规则->新建规则 里面可以添加自己允许的端口号。

as3.0 socket连接到java服务端

//ServerThread .java

package com.feiruo.Chess;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerThread extends Thread
{
     Server       father;
     boolean      tag=true;
     String       xmlString="<cross-domain-policy>";
     ServerSocket ss;

     public ServerThread(Server server)
     {
         this.father=server;
         this.ss=father.ss;

         this.xmlString="<?xml version=\"1.0\"?>" +
                 "<!DOCTYPE cross-domain-policy SYSTEM \"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd\">" +
                     "<cross-domain-policy>" +
                     "<allow-access-from domain=\"*\" to-ports=\"8082\" />" +
                     "</cross-domain-policy>\0"; 

     }
     public void run()
     {
        while (this.tag)
        {
            try
            {
                //等待连接:
                Socket sc=ss.accept();
                BufferedReader br = new BufferedReader(new InputStreamReader(sc.getInputStream()));
                PrintWriter pw = new PrintWriter(sc.getOutputStream());
                char[] by = new char[22];
                br.read(by,0,22);
                String msghead = new String(by);
                // System.out.println(msghead);
                if (msghead.startsWith("<policy-file-request/>"))
                {
                    pw.print(this.xmlString);
                    pw.flush();
                }
                else
                {
                    //开启代理线程
                    ServerAgentThread sat=new ServerAgentThread(this.father, sc);
                   // System.out.println("已发送");
                    sat.start();
                    sat.dou.writeUTF("<#CONNECTED#>");
                    sat.dou.flush();
                    sat.tag=true;

                   // System.out.println("IP:"+sc.getInetAddress());
                }
            } catch (Exception e)
            {
               this.tag=false;
            }

        }
     }
}

检测客户端是否断开连接

//检测出客户端是否断网或者离线
            try {
                sc.sendUrgentData(0);
                } catch (IOException e)
                {
                    this.client_leave("<#CLIENT_LEAVE#>"+this.getName());
                    tag=false;//终止该服务器代理线程
                } 

sendUrgentData方法会往输出流发送一个字节的数据,只要对方Socket的SO_OOBINLINE属性没有打开,就会自动舍弃这个字节,而SO_OOBINLINE属性默认情况下就是关闭的。

 AS3.0使用setTimeout判断socket连接超时

private var isResponsed:Boolean=false; 

......

 setTimeoutHandlerId=setTimeout(
                                  function():void
                                  {
                                       if(!isResponsed)
                                       {
                                           this.ERROR="网络连接超时,\n请重新尝试!";
                                       }
                                   },timeoutMs);
this.addEventListener(Event.CONNECT,haveConnected);

......

private function setReponsedHandler(event:Event):void
{
     isResponsed=true;
     clearTimeout(setTimeoutHandlerId);
}

......

public function haveConnected(event:Event):void
{
      clearTimeout(setTimeoutHandlerId);
      this.flush();
}

2.数据传送

AS3.0读取服务器数据:这里可能遇到的问题就是读取数据遇到文件尾。起初我使用的是Socket.readUTFBytes(Socket.bytesAvailable);但是会发现读取的数据是读取完了,但是在给临时变量赋值的时候字符串是断断续续的,以至于后面对数据的分析和判断不怎么好进行操作。我也先把数据存起来等它全部读完之后再合并之后进行分析操作,但是感觉这样好繁琐。最后选用了Socket.readUTF()方法,但是会有遇到文件尾问题,于是自己也百度了许多,但看到的方法感觉并不怎么适合自己,最后我想既然是遇到文件尾,肯定是我对数据发送时处理的不恰当,最后发现我在java客户端发送数据之后都没有清空的原因。真表示马虎。DataOutputStream.flush();

时间: 2024-10-10 12:44:51

网游练习总结(2)的相关文章

[盘点]现今热门的h5网游

各位好久不见,过年的休息时间已经结束,大家休息了一周,又要开始新的一年的奋斗了!于是小编从回来的第一天就开始花时间自己整理了一篇文章,所有各位是不是应该夸一夸小编呢?因为小编又要开始分享“干货”了.(都是小编自己的一些理解,若有错误或不足,请提出) 各位在过年的这一段时间里,都干了些啥呢? 别的不说,肯定有很多单身的童鞋们被长辈们同时逼问事业与爱情上的种种事情,当然小编也是一样,然后各种躲着不肯见人,于是无聊地掏出自己的手机,打开游戏,思考人生. (强行回归话题,感觉没啥关系,其实是扯淡) 说到

网游用户必须实名!凛冬将至,这些游戏商在瑟瑟发抖

作为互联网消费的大户--网游一直是众多企业的心头肉,想方设法地研发.代理多个类型的网游,并挖空心思地在收费模式.道具虚拟币等上面创新,试图让网民心甘情愿地在网游中进行消费.但不可否认的是,虽然网游已经成为很多人的休闲方式,但也带来了众多负面问题.因此,政府对网游的监管力度也是越来越强. 近日,文化部发布<关于规范网络游戏运营加强事中事后监管工作的通知>,其中值得游戏商注意的有多个要点.首次明确规定网络游戏虚拟货币.虚拟道具不能兑换法定货币.应要求用户使用有效身份证件进行实名注册.不得为使用游客

网游新规来袭,玩家还要为《阴阳师》费氪伤肝吗?

是否这一新规,会让阴阳师的火爆出现变数呢?欧洲人,非洲人的问题将变得不难么重要了呢? 文/张书乐 日前,文化部在其官网发布<关于规范网络游戏运营加强事中事后监管工作的通知>(以下称<通知>),其中规定,网络游戏运营企业应当在游戏的官方网站或者游戏内显著位置公布参与用户的随机抽取结果.目前,几乎所有的游戏都没有公布抽卡概率,包括近期最为火爆的<阴阳师>,该游戏ssr的获得概率一直是个谜.那么,新规的实行,是否会对<阴阳师>等爆款游戏产生影响? 对此,每日经济新

决战JavaScript服务端网游开发

在经过三年多的手游客户端学习与开发练习后,我发现仅满足于前端仅能在游戏开发中占居一席之地.要想全面深入理解手游开发逻辑,特别是如今的网络时代的手游数据管理及通信逻辑,必须掌握一定的服务器端开发技术.作一个十分相似的比较,就像Web开发,只懂得前端技术(HTML/HTML5/CSS/DOM/BOM/JQUERY/JS),也只能是具备了一条腿走路的能力,而两条腿走路则更是每一个程序员所期望的.因此,作为一名优秀的Web前端程序员最好对于 服务器端开发技术也有一定程度的了解. 值得欣喜的是,相当多的程

一步一部学习Unity3d学习笔记系1.2 单机游戏和网游的数据验证概念

这一次的笔记的主要内容是单机和网游的数据存储,数据验证方式,在游戏的时候除了控制角色的行动,还涉及到用户角色的升级,经验,金钱赚取,道具购买,技能升级 等等一些数据的交易, 那么单机游戏和网游的区别如下如图: 单机购买流程: 单机游戏的数据存储都是在本地客户端存储的,验证简单,执行简单,在玩单机游戏的时候我想很多人都知道外挂是怎么回事吧没救是通过修改内存,或者是本地数据无敌,随时原地满血复活状态. 网游相对来说数据安全性就比较高了,前几年的网游还有外挂,比如说CF 开启外挂来直接枪枪爆头,隔墙爆

网游练习总结(1)

最近一段时间在校也闲得没事干,反正是好长一段时间,干脆就做一个<中国象棋>网游耍耍打发时间.弄了好久没有写总结,以及整个过程中遇到的问题,今天就赶紧写一哈,难免后面就会忘了. 一.注册登录界面: 可能会说这么简单的游戏,网上可能例子很多,也没有必要弄注册这样的功能,其实我只是学着玩玩哈. 关于注册我使用的是php与as3.0交互做的,有与php学的非常浅,也遇到了不少问题: 1.检测是否注册成功:这个也困了时间不是很长,但是觉得比较重要,我搜了一些资料找到的: mysql_affected_r

张书乐:网游“小花仙”存女童遭性侵漏洞,实名制被破了吗?

据第一财经披露,网络游戏小花仙在女童中传播广泛,玩家总数已达百万级.但这款游戏的社交功能,也被一些不良男性钻了空子.他们以换取该款游戏的充值卡劵为诱饵,吸引女童裸露身体以及裸聊,甚至线下约出实施猥亵. 上述信息被热心于保护女童的玩家发现并多次披露于众.就此,第一财经记者张剑和笔者进行了一番交流. 文/张书乐(人民网.人民邮电报专栏作者,资深游戏产业评论人) 新著有<微博运营完全自学手册> 愚以为,小花仙游戏出现的对女童性侵的隐患,在业界也有过讨论.出现问题后,开发方关闭相关社交功能,势必导致用

天翔断空裂F--9什么手机网游游戏赚钱

这款游戏其实无论从画面上还是才做的技能释放效果上,都是值得称赞的,小北也有幸在这里为大家带来最新的评测,如果你是一个仙剑迷或者是本文由武侠游戏提供,转载请注明出处http://cnpjap2.kayufaj.com/,谢谢!的忠实粉,那么这款游戏绝对是你的首选,小北认为游戏还是很值得试玩的,下面一起来看看详细的效果吧. 中奖规则:活动到期后,请获奖的玩家当天23:59前向我们官方客服人员提供军团排名截图一张,再提供您的平台,区服,角色名.我们核实确定(3-5个工作日)后,我们将通过游戏内邮件的方

使用行为树(Behavior Tree)实现网游奖励掉落系统

原地址:http://blog.csdn.net/akara/article/details/6165421 [原创]使用行为树(Behavior Tree)实现网游奖励掉落系统by AKara 2011-01-24 @ http://blog.csdn.net/akara @ akarachen(at)gmail.com @weibo.com/akaras 奖励/掉落系统,涵盖物品,经验,金钱等网游中可直接给予玩家的元素.一个简单,直观,可扩展的掉落系统对网游中的产出控制起非常重要的作用. 奖

张左峰的歪理邪说 之 对于瀑布式开发和敏捷开发在网游开发中的应用

本周小孩送回姥爷姥姥家,终于有时间更新一下自己的微博了,三年没更新了,我真TMD懒惰!我错了....这次努力更新一些东西 有些人问我,为啥不去一些大点的微博站写这些内容.我觉得没有必要啊,反正早晚都会被搜索引擎爬到,哪里都一样. 本文纯理论,是一个思想指导,你完全照搬,你就输了....尽可能写的雅俗共赏一些,一起研究学习进步! 正文开始.....(哪那么多废话...果然人老了) 首先,我们要明确两个概念 瀑布式开发:瀑布式,顾名思义,自上而下,连绵不绝,稳步推进.瀑布式开发,是一个我们最常规的开