首页 > 代码库 > LuaFramework的网络连接、消息分发

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

  

LuaFramework的网络连接、消息分发