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