zoukankan      html  css  js  c++  java
  • LuaFramework的网络连接、消息分发

    服务端 --接收到消息,原样返回

    using System;
    using System.Net;
    using System.Net.Sockets;
    namespace LuaFramework_UGUI_master_Server
    {
        class Program
        {
            static void Main(string[] args)
            {
                Socket listenfd = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPAddress ipAdr = IPAddress.Parse("127.0.0.1");
                IPEndPoint ipEp = new IPEndPoint(ipAdr, 1234);
                listenfd.Bind(ipEp);
                listenfd.Listen(0);
                Console.WriteLine("服务器启动成功");
                while (true)
                {
                    Socket connfd = listenfd.Accept();
                    Console.WriteLine("服务器Accept");
                    byte[] readBuffer = new byte[100];
                    int count = connfd.Receive(readBuffer);
                    string showStr = "";
                    for (int i = 0; i < count; i++)
                    {
                        int b = (int)readBuffer[i];
                        showStr += b.ToString() + " ";
                    }
                    Console.WriteLine("服务器接收字节流:" + showStr);
                    //解析消息
                    //1.前两个字节为消息长度
                    //2.后两个字节为协议
                    //3.后面的字节为消息内容
                    Int16 messageLen = BitConverter.ToInt16(readBuffer, 0);
                    Int16 protocal = BitConverter.ToInt16(readBuffer, 2);
                    Int16 strLen = BitConverter.ToInt16(readBuffer, 4);
                    string str = System.Text.Encoding.ASCII.GetString(readBuffer, 6, strLen);
                    Console.WriteLine("【服务器接收】长度:" + messageLen);
                    Console.WriteLine("【服务器接收】协议号:" + protocal);
                    Console.WriteLine("【服务器接收】字符串:" + str);
                    //返回消息
                    byte[] writeBuffer = new byte[100];
                    Array.Copy(readBuffer, writeBuffer,count);
                    connfd.Send(writeBuffer);
                }
            }
        }
    }
    

      

    客户端:
    Main.lua -- 建立连接
    require "Network"
    --主入口函数。从这里开始lua逻辑
    function Main()
    	--网络连接
    	print("网络连接");
    	local networkMgr = LuaHelper.GetNetManager();
    	local AppConst = LuaFramework.AppConst;
    	AppConst.SocketPort = 1234;
    	AppConst.SocketAddress = "127.0.0.1";
    	networkMgr:SendConnect();
    end
    

      Network.lua -- 接收、发送消息

    Network = {};
    --协议
    Protocal = {
           Connect = '101';			--连接服务器
           Exception = '102';       --异常掉线
           Disconnect = '103';      --正常断线   
           Message = '104';			--接收消息
    }
    --接收Socket消息--
    function Network.OnSocket(key, data)
        if key == 101 then
    		LuaFramework.Util.Log('OnSocket Connect');
    		Send()
        elseif key == 104 then
            LuaFramework.Util.Log('OnSocket Message');
    		local str = data:ReadString();
    		LuaFramework.Util.Log('Received String : '..str);
        else
    		LuaFramework.Util.Log('OnSocket Other : '..key);
    	end
    end
    --发送Socket消息--
    function Send()
    	--组装数据
    	local buffer = LuaFramework.ByteBuffer.New();
    	buffer:WriteShort(Protocal.Message);
    	buffer:WriteString("Unity3d Online Game Book");
    	--发送
    	local LuaHelper = LuaFramework.LuaHelper;
    	local networkMgr = LuaHelper.GetNetManager();
    	networkMgr:SendMessage(buffer);
    	LuaFramework.Util.Log("Data Send Complete");
    end
    

      

  • 相关阅读:
    wstngfw中配置snort
    ROUTE: route addition failed
    putty和psftp命令行参数
    a2 Bluebottle OS
    Project Oberon
    【批处理学习笔记】第二十五课:间接传递
    【批处理学习笔记】第二十四课:直接传递
    Java异常抛出及try,catch应用实例
    【Python学习笔记之二】浅谈Python的yield用法
    【批处理学习笔记】第二十三课:用户变量和变量引用
  • 原文地址:https://www.cnblogs.com/fuyunzzy/p/6601009.html
Copyright © 2011-2022 走看看