cocos2d-Lua10网络Http&Socket编程

来源:互联网 发布:excel 按钮 切换数据 编辑:程序博客网 时间:2024/05/24 04:16

复习:

 1。实现CocosLua项目的打包
   1.1 安装sdk
   1.2 安装ndk
   1.3 安装ant
   1.4 安装adt
   1.5 进入命令提示符    
 
       python  setup.py
   1.6 重启命令提示符
       cocos new -p xx.cc.cc -l lua - d d:  test
   1.7 在eclipse导入项目
   1.8 设置项目的平台
   1.9 拷贝 lib 到项目src目录
   1.10 进入命令提示符
     cocos compile -p android
    生成.so
   1.11 打包apk
------------------------------------------------------------
实现C语言函数  
    C++类的注册


 lua中调用






学习:

网络编程:


  客户端                          服务器
 ios
 android


             1.短连接
                通过Http协议访问网络服务器
               客户端--------------〉
                           request
                                      login.php
                                      解释执行
                     <-------------
                          response 
                  1场景跳转
                  0
             2.长连接
                        Socket协议
                                创建
                                绑定端口
                                侦听
                连接服务器
                                接受请求
                       《-------》
                        双向通讯
                      关闭
---------------------------------------------------------
1。搭建Web服务器
   定义服务器访问的接口
 1.1 接口URL
     http://ip:port/login.php
 1.2 参数说明
      us char 用户名
      ps char 密码
 1.3 返回值
      0 登陆失败
      1 登陆成功
 1.4 在浏览器中进行测试




2。通过cocosLua访问服务器
 --1创建网络连接对象
            local xhr = cc.XMLHttpRequest:new()
            xhr.responseType = cc.XMLHTTPREQUEST_RESPONSE_STRING
            local url=
             "http://172.16.94.224/login.php?us="..
              tfUser:getStringValue() .."&ps="..
              tfPass:getStringValue()
             print(url)
            --2指定URL
            xhr:open("GET",url)
            --3定义回调函数
            local function onReadyStateChange()
                local statusString = "Http Status Code:"..xhr.statusText
                local res=xhr.response
                print("从服务器获取数据:"..res)
                if tonumber(res)==1 then
                  local sc=require("ScoketScene")
                  cc.Director:getInstance():replaceScene(sc:create())
                end
            end
           --4.绑定回调
            xhr:registerScriptHandler(onReadyStateChange)
            xhr:send() --5发送请求
-----------------------------------------------------------------------------
服务器                        客户端
创建create
绑定端口bind
开始侦听 listener         
                             创建create
                             连接Connect
    接受请求
                 《------------》
                    发送 接收


         关闭                  关闭
--------------------------------------------------------------------------


  print("onEnter")
        local socket = require("socket") --1。请求Socket对象
        print(tostring(socket))
        local host = "127.0.0.1"
        local port = 8867--19730
        local c = socket.tcp()   --2.创建Socket对象     
        local n,receive_status = c:connect(host, port)--3连接服务器
        c:settimeout(0)
        print("connect return:",n,e)
        c:send("Hello")
        local function tcpSocketgetMsg()
                 local response, receive_status=c:receive()
        end
    local node=cc.Node:create()
    self:addChild(node)
    node:scheduleUpdateWithPriorityLua(tcpSocketgetMsg,0)









GameScene.lua


--请求文件
require("Cocos2d")
require("CocoStudio")
require("json")
--定义类的继承
local GameScene=class("GameScene",function ()
    return cc.Scene:create()
end)
--添加create方法
function GameScene:create()
    local scene=GameScene.new()
    scene:addChild(scene:init())
    local function sceneEnent(E)
    if E=="enter" then
    scene:onEnter()
    end
    end
    scene:registerScriptHandler(sceneEnent)
    return scene
end
--构造方法
function GameScene:ctor()
    self.winsize=cc.Director:getInstance():getWinSize()
end
--初始化场景
function GameScene:init()
    local layer=cc.Layer:create()
    --添加ui
    --local root=ccs.GUIReader:getInstance():widgetFromJsonFile("DemoLogin/DemoLogin.json")
    --layer:addChild(root)
   
    return layer
end
function GameScene:onEnter()
    print("onEnter")
    local function logic(t)
    g_count=g_count+1
     if g_count<100 then return
    else
    
    --1联网设置URL
            local url=string.format("http://192.168.254.176/getmsg.php?msgid=%d",g_now_messId)
    --print(url)
    --2.创建XMLHttpRequest对象
    local xhr = cc.XMLHttpRequest:new()
    g_conn=xhr
--    xhr.responseType = cc.XMLHTTPREQUEST_RESPONSE_STRING
    xhr.responseType=cc.XMLHTTPREQUEST_RESPONSE_JSON
    xhr:open("GET", url)
    --3.定义回调函数
    local function onReadyStateChange()
        local statusString = "Http Status Code:"..xhr.statusText
        --获取服务器返回的数据
        print("返回信息:"..xhr.response)
       local output = json.decode(xhr.response,1)
      for index=1,#output["result"] do
            local msg=tostring(output["result"][index]["uname"]).." say:"..tostring(output["result"][index]["say"])
--            print(...)
            if tonumber(output["result"][index]["chatid"])>g_now_messId then
                 g_now_messId=tonumber(output["result"][index]["chatid"])
            end
--            --显示这句话在屏幕
            local lab=cc.Label:createWithTTF(msg,"fonts/Marker Felt.ttf",28)
            lab:setPosition(200,30*(index))
            local act1=cc.DelayTime:create(index)
            local act2=cc.MoveBy:create(2,cc.p(0,20))
            local act3=cc.FadeOut:create(2)
                    local function kill(obj)
                        obj:removeFromParent()
                        print("kill")
            end
            local actsw={act2,act3}
            local act4=cc.CallFunc:create(kill)
            local acts={
            act1,--延时
            cc.Spawn:create(actsw), --移动
            act4 --消除
            }
                    self:addChild(lab)
                    local act=cc.Sequence:create(acts)
             lab:runAction(act)
           
      end   
               
    
    end
    --4.绑定回调函数
    xhr:registerScriptHandler(onReadyStateChange)
    xhr:send() --向服务器发送请求
    print("网络开始连接,请等待")
    g_count=0
    end
    end
    self:scheduleUpdateWithPriorityLua(logic,0)
end
return GameScene




LoginScene.lua


--请求文件
require("Cocos2d")
require("CocoStudio")
--定义类的继承
local LoginScene=class("LoginScene",function ()
return cc.Scene:create()
end)
--添加create方法
function LoginScene:create()
local scene=LoginScene.new()
scene:addChild(scene:init())
return scene
end
--构造方法
function LoginScene:ctor()
self.winsize=cc.Director:getInstance():getWinSize()
end
--初始化场景
function LoginScene:init()
local layer=cc.Layer:create()
--添加ui
local root=ccs.GUIReader:getInstance():widgetFromJsonFile("DemoLogin/DemoLogin.json")
layer:addChild(root)

local btLogin=root:getChildByTag(14)
local txtuser=root:getChildByTag(8)
local txtpass=root:getChildByTag(9)
local function btclick(obj,evt)
print(string.format("s%d",evt))
if evt==2 then
 --1联网设置URL
 local url=string.format("http://192.168.254.176/CheckLogin.php?uname=%s&upass=%s",
                    txtuser:getStringValue(),
                    txtpass:getStringValue())
 --print(url)
 --2.创建XMLHttpRequest对象
            local xhr = cc.XMLHttpRequest:new()
            g_conn=xhr
            xhr.responseType = cc.XMLHTTPREQUEST_RESPONSE_STRING
            xhr:open("GET", url)
           --3.定义回调函数
            local function onReadyStateChange()
                local statusString = "Http Status Code:"..xhr.statusText
                --获取服务器返回的数据
                print("返回信息:"..xhr.response)
                g_now_userid=tonumber(xhr.response)
                if g_now_userid>0 then
                   local scene=require("GameScene")
                   local gs=scene:create()
                   cc.Director:getInstance():replaceScene(gs)
                end
            end
           --4.绑定回调函数
            xhr:registerScriptHandler(onReadyStateChange)
            xhr:send() --向服务器发送请求
            print("网络开始连接,请等待")
end
end
btLogin:addTouchEventListener(btclick)

return layer
end
return LoginScene




SocketScene.lua


--请求文件
require("Cocos2d")
require("CocoStudio")
require("json")
--定义类的继承
local ScoketScene=class("ScoketScene",function ()
    return cc.Scene:create()
end)
--添加create方法
function ScoketScene:create()
    local scene=ScoketScene.new()
    scene:addChild(scene:init())
    local function sceneEnent(E)
    if E=="enter" then
    scene:onEnter()
    end
    end
    scene:registerScriptHandler(sceneEnent)
    return scene
end
--构造方法
function ScoketScene:ctor()
    self.winsize=cc.Director:getInstance():getWinSize()
end
--初始化场景
function ScoketScene:init()
    local layer=cc.Layer:create()
    --添加ui
    --local root=ccs.GUIReader:getInstance():widgetFromJsonFile("DemoLogin/DemoLogin.json")
    --layer:addChild(root)
   
    return layer
end
function ScoketScene:onEnter()
        print("onEnter")
        local socket = require("socket")
    print(tostring(socket))
       local host = "192.168.254.118"
        local port = 8888--19730
        local c = socket.tcp()
       
        local n,receive_status = c:connect(host, port)
        c:settimeout(0)
        print("connect return:",n,e)
        c:send("Hello")
        local function tcpSocketgetMsg()
        print("receive1")
                   local response, receive_status=c:receive()
        print("receive2")
                   print("receive return:",response or "nil" ,receive_status or "nil")
--                    print("receive:"..response)
                   if response ==nil then return end
                    --显示这句话在屏幕
                    local lab=cc.Label:createWithTTF(response,"fonts/Marker Felt.ttf",28)
                    lab:setPosition(200,30)
                    local act1=cc.DelayTime:create(0)
                    local act2=cc.MoveBy:create(2,cc.p(0,20))
                    local act3=cc.FadeOut:create(2)
                    local function kill(obj)
                        obj:removeFromParent()
                        print("kill")
                    end
                    local actsw={act2,act3}
                    local act4=cc.CallFunc:create(kill)
                    local acts={
                        act1,--延时
                        cc.Spawn:create(actsw), --移动
                        act4 --消除
                    }
                    self:addChild(lab)
                    local act=cc.Sequence:create(acts)
                    lab:runAction(act)
    end
    local node=cc.Node:create()
    self:addChild(node)
    node:scheduleUpdateWithPriorityLua(tcpSocketgetMsg,0)
end


return ScoketScene

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果手机音乐里的歌删掉了怎么办 上课学生把粉笔擦藏起来了怎么办 手机没法解压10g压缩包怎么办 苹果id被锁邮箱也忘记密码怎么办 手机号注册的微信忘记密码怎么办 qq号注册微信忘记密码怎么办 云课堂密码忘记手机号更改了怎么办 孩子做事才要奖励怎么办的教案 员工做事效率低家庭情况不好怎么办 安全云课堂人脸识别失败怎么办 酷我k歌里音乐太少怎么办 酷狗里面的歌没有了怎么办 第一试用网登录密码忘记了怎么办 第一试用网登录密码忘了怎么办 微博登录直播间帐号被锁定怎么办 硫酸不小心弄到皮肤上怎么办 小米平板进水了开不了机怎么办 U盘被弹出后再插没有显示怎么办 视频从U盘传下来不能播放怎么办 微博账号忘了登录名怎么办 迅雷应版权方要求无法下载怎么办? 微信账号忘记密码上面有钱怎么办 蘑菇街账号忘记了里面有钱怎么办 手机注册的百度云帐号换号怎么办 网易云音乐sd卡写入失败怎么办? 玩客云涌u盘满了怎么办 手机安装杜比音效失败死机该怎么办 网易云音乐下载额度用完了怎么办 苹果手机付费app连续扣费怎么办 oppoO粉卡的流量用没了怎么办 qq邮箱里的文件过期了怎么办 163邮箱里的文件过期了怎么办 做人事的给员工漏交社保了怎么办 公司漏交了员工一个月的社保怎么办 小米4c能充电不能开机怎么办 小米手机关机开不开机该怎么办 小米5s关机开不开机怎么办 老板跑路了员工社保还挂着怎么办 红米5连wifi很慢怎么办 电脑百度网盘下载速度慢怎么办 新手机与旧手机同步了怎么办