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

  

时间: 2024-10-20 14:17:38

LuaFramework的网络连接、消息分发的相关文章

android 使用brocastReceiver监听网络连接状态

public class BroadcastService extends Service{ private ConnectivityManager connectivityManager;//网络连接管理器 private NetworkInfo networkInfo;//当前网络的信息 //点击查看 private PendingIntent messagePendingIntent = null; //通知栏消息 private Notification messageNotificat

网络连接相关基础知识笔记

一.常说的TCP/IP的含义 TCP/IP协议簇并不仅仅指TCP协议和IP协议,实际它包括了一系列协议组成的集合,如:TCP,IP,UDP,FTP,SMTP,DNS,ARP,PPP等 TCP与UDP协议都属于传输层协议,但有很大不同,TCP是面向连接的协议,提供的是可靠的数据流服务,TCP采用"带重传的肯定确认"机制来实现传输的可靠性,实现了一种"虚电路",因为从物理上来说,并不是真正在两台主机间建立了连接,这种连接只是存在于逻辑上的.最大的开销出现在通信前建立连接

MMORPG大型游戏设计与开发(服务器 游戏场景 掉落与网络连接)

时间一点点的消逝,伴着自己空闲日子将要结束的时候我尽量的学习和分享场景和AI的知识给朋友们,不过很遗憾的是这些文章还有不足的地方,就是有的难点没有完全的分析到.掉落在游戏中必不可少的,同时网络连接也是网络游戏中的核心部分,那么这两个东西又怎么和场景关联起来的? 一张截图 掉落(管理器) 1.初始化(init) 根据地图的长宽初始化掉落点数据. 2.是否可掉落(is can drop) 传入坐标返回该点是否可以掉落. 3.设置掉落点(set drop position) 传入一个坐标,并将该点设置

客户端运行gpupdate /force,后提示原因是缺少到域控制器的网络连接

问题: C:\Users\wb>gpupdate /force正在更新策略... 用户策略更新成功完成.无法成功更新计算机策略.遇到下列错误: 处理组策略失败,原因是缺少到域控制器的网络连接.这可能是暂时情况.一旦计算机连接到域控制器并且成功处理组策略,即会产生成功消息.如果几个小时内未显示成功消息,则请与管理员联系. 若要诊断故障,请查看事件日志或从命令行运行 GPRESULT /H GPReport.html 来访问有关组策略结果的信息. 原因是缺少到域控制器的网络连接 解决 : 过段时间自

常用三方,Reachability 检测网络连接

常用三方 Reachability 检 测网络连接 用来检查网络连接是否可用:包括WIFI和 WWAN(3G/EDGE/CDMA等)两种工作模式. 可以从Apple网站下载到: http://developer.apple.com/library/ios/#samplecode/Reachab ility/History/History.html#//apple_ref/doc/uid/DTS40007324-R evisionHistory-DontLinkElementID_1. 现在有更好

【Android】Android 登录界面设计和网络连接及验证登录

AndroidManifest.xml <uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 布局文件:activity_main.xml <RelativeLayout xm

RabbitMQ消息分发轮询和Message Acknowledgment

一.消息分发 RabbitMQ中的消息都只能存储在Queue中,生产者(下图中的P)生产消息并最终投递到Queue中,消费者(下图中的C)可以从Queue中获取消息并消费. 多个消费者可以订阅同一个Queue,这时Queue中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理. 启动3个消费者 生产者依次生成3条消息 可见3条消息分别被3个消费者获取,所以RabbitMQ是采用轮询机制将消息队列Queue中的消息依次发给不同的消费者 二.消息确认(Message Ac

阿里云异常网络连接-可疑WebShell通信行为的分析解决办法

2018年10月27日接到新客户网站服务器被上传了webshell脚本***后门问题的求助,对此我们sine安全公司针对此阿里云提示的安全问题进行了详细分析,ECS服务器被阿里云提示异常网络连接-可疑WebShell通信行为,还会伴有,网站后门-发现后门(Webshell)文件,以及提示网站后门-一句话webshell的安全提示,但是大部分都是单独服务器ECS的用户,具体被阿里云提示的截图如下: 点开消息后的内容为:受影响资产 iZ2393mzrytZ 访问者IP Webshell URL 事件

网络连接的三次握手及四次握手

网络连接的三次握手及四次握手   一个数据从一台主机传输到另一台主机,看似平淡无奇,但是稍微了解就知道其底层其实是非常复杂的,下面我们说一下OSI(Open System Interconnection)开放系统互连,一个数据要经过7个过程的层层打包,然后到对方电脑后再层层解包来完成.     第一层:物理层(physical)也是最底层了,把打包好的数据通过二进制进行传输.为启动.维护以及关闭物理链定义了电气规范.机械规范.过程规范和功能规范.     第二层:数据链路层(data link)