一、功能

  lua log方法能够自动发现同一网段下面的log服务器

  lua log方法能够主动将log发给服务器

  lua 客户端进程重启服务端不存在影响

二、实现

  服务器使用python编写:

    启动一个线程,用UDP监听特定端口,接受客户端的扫描,反馈日志的端口

    启动一个线程,监听特定端口,接受TCP连接,分派新的日志线程处理log

  客户端使用lua 编写:

    打印log之前使用UDP套节字扫描服务器的日志端口,然后创建TCP套节字发送日志

三、源代码:

  服务器:

import socket
import time
import re
import threadudp_listen_port = 31500
tcp_listen_port = 31501
stop_udp_server = Falsedef getLocalIP():myname = socket.getfqdn(socket.gethostname())myaddr = socket.gethostbyname(myname)return myaddr;def getTime():return time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))def Log(content):print("[%s]: %s" % (getTime() ,content))def startUDPServer():address = (getLocalIP(), udp_listen_port)s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)s.bind(address)print('listen broadcast %s:%s' % address)Log('listen broadcast %s:%s' % address)while not stop_udp_server:data, addr = s.recvfrom(2048)if not data:Log("client not existed!")continueLog('received %s from %s' % (data, addr))client_ip_port = '{0}:{1}'.format(addr[0],addr[1])pat = re.compile("^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d+)$")for ip,port in pat.findall(client_ip_port):Log('Got iphone addr:port = %s %s' % (ip, port))local_addr_port = (getLocalIP(), tcp_listen_port)Log('Rsp server addr:port = %s %s' % local_addr_port)rsp_data = '{0}'.format(local_addr_port[1])s.sendto(rsp_data,addr)break;s.close()def startTCPLogServer(sock,client):while(True):try:data = sock.recv(4096)if data:pat = re.compile('\[(.*?)\]')for log in pat.findall(data):Log(log)else:break;except socket.error:sock.close()breakLog('client (%s,%s) close' % client);sock.close()def startTCPListenServer():#create tcp socketsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#bind local ip-portserver_addr = (getLocalIP(), tcp_listen_port)Log('start tcp server on %s port %s' % server_addr)sock.bind(server_addr)sock.listen(5)#print recv datawhile(True):ss,addr = sock.accept()Log('Got log client from (%s,%s)' % addr)thread.start_new_thread(startTCPLogServer,(ss,addr,))sock.close()if __name__ == '__main__':t_udp = thread.start_new_thread(startUDPServer, ())t_tcp = thread.start_new_thread(startTCPListenServer, ())while (True):time.sleep(1)

  客户端:

udp_listen_port = 31500tcp_server_ip = ""
tcp_server_port = 0function getLocalIP()local socket = require("socket")local ip, v = socket.dns.toip(socket.dns.gethostname())for k,v in pairs(v.ip) doreturn vendreturn nil
endfunction tryFindLogServer()local ip = getLocalIP();local ipTable = {}local socket = require("socket")local udp = socket.udp()if ip ~= nil thenfor i in string.gmatch(ip, "%d+") doprint(i)table.insert(ipTable,i)endendlocal length = table.getn(ipTable)local findip = nil local findport = nilif length > 0 thenfor i = 100, 255 do local desIP = string.format("%s.%s.%s.%s",ipTable[1], ipTable[2], ipTable[3], tostring(i))print(desIP)udp:setpeername(desIP, udp_listen_port)udp:settimeout(0.5)udp:send("Hello")data = udp:receive()if data ~= nil thenprint(string.format("find server %s:%s", desIP,data))tcp_server_ip = desIPtcp_server_port = tonumber(data)return true;endendendreturn false
endtcp = nilfunction Log( content )-- bodyif tcp == nil thenlocal socket = require("socket")tcp = socket.tcp()tcp:connect(tcp_server_ip,tcp_server_port)endtcp:send(string.format("[%s]",tostring(content)))
endif tryFindLogServer() thenfor i = 1,100 doLog("find server")endend

四、客户端lua中加载luasocket的方式如下:

local sz = require("sz")
local http = require("szocket.http")
local res, code = http.request("http://www.baidu.com");
if code == 200 thenLog("start")Log(res)dialog(res,0);Log("end")
end

触动精灵远程Log模块相关推荐

  1. 触动精灵 python_触动精灵远程Log模块

    一.功能 lua log方法能够自动发现同一网段下面的log服务器 lua log方法能够主动将log发给服务器 lua 客户端进程重启服务端不存在影响 二.实现 服务器使用python编写: 启动一 ...

  2. boost::log模块实现将日志记录初始化到远程 syslog 服务器

    boost::log模块实现将日志记录初始化到远程 syslog 服务器 实现功能 C++实现代码 实现功能 boost::log模块实现将日志记录初始化到远程 syslog 服务器 C++实现代码 ...

  3. 【触动精灵】开发手册学习整理(一)

    简介 触动精灵采用 Lua 脚本语言作为底层语言,支持 Lua 5.2.3 版本的所有语法与基本函数,并在其基础上添加了一些扩展函数,用于实现取色.找色.找图.发送触摸事件等高级功能. Lua语言 L ...

  4. 触动精灵 python,[触动精灵]零基础小白学触动5-8

    零基础小白学触动 - 05 - 触动常用函数 点击 滑动 原理 其实都可以分解成按下=> 等待一定时间或者移动动作=>  松开 ?如何实现精确滑动  https://zimaoxy.com ...

  5. ios平台触动精灵lua调用C语言

    随着移动设备的兴起,Lua 作为嵌入式脚本语言,由于其自身的特点及优势,在应用领域使用度越来越高.触动精灵是一个手机游戏辅助平台,可以在上面开发自动化游戏的脚本,编程语言为lua.调用C语言对lua进 ...

  6. Remote Execution - SaltStack远程执行模块使用指南

    文章目录 Remote Execution - Salt远程执行模块 Salt Execution Modules Remote execution tutorial - 远程执行模块使用教程 开始管 ...

  7. 触动精灵从入门到精通视频教程 附带全套软件

    工具,平台使用说明 字库工具使用说明.mp4 抓点抓色器使用说明.mp4 开发者平台脚本上传和管理.mp4 开发者工具下载.mp4 触动产品&应用场景[很重要].mp4 IDE使用说明.mp4 ...

  8. 触动精灵:触动精灵脚本编辑器

    1.编辑器的安装和使用 http://v.youku.com/v_show/id_XMTgwNzY3NzAwNA==.html https://www.zybuluo.com/miniknife/no ...

  9. 深入探讨Python的import机制:实现远程导入模块 | CSDN博文精选

    来源 | Python编程时光(ID:Python-Time) 所谓的模块导入,是指在一个模块中使用另一个模块的代码的操作,它有利于代码的复用. 也许你看到这个标题,会说我怎么会发这么基础的文章? 与 ...

最新文章

  1. 变量与字符串的连接 - format、格式化字符串
  2. sqlserver中判断表是否存在
  3. 2-16 HDO1106
  4. sicily 1024 Magic Island
  5. 高等数学上-赵立军-北京大学出版社-题解-练习6.1
  6. 实现深拷贝的几种方法
  7. 高等组合学笔记(八):第一类Stirling数, 整数分拆
  8. Atitit.增强系统稳定性----虚拟内存的设置
  9. java分组求和实例_mybatis example group by count 分组求和 - java分组求和
  10. dell主板恢复出厂设置_DELL如何进入BIOS及恢复BIOS出厂设置
  11. 稚晖君_瀚文机械键盘
  12. python量化交易--因子选股策略
  13. too many open files in system报错处理方案
  14. 智慧交通:地铁站 3D 可视化,车路协同赋能科学出行
  15. python排序输出人名,005_015 Python 人名按字母排序,首字母分组
  16. 解析ip到对应城市:ipdatabase
  17. web端自动化测试框架之selenium4从入门到项目实战-3- unittest使用
  18. CS61A Lab 11
  19. 浏览器必备插件|2022版
  20. 织信Informat-低代码开发平台 JNPF快速开发平台可视化工具 3.3.3版本

热门文章

  1. mac关闭icloud_如何在Mac上使用(或禁用)iCloud优化存储
  2. 单片机流星灯_基于51单片机的16路流星灯程序
  3. excel2013怎么散点图添加横纵坐标
  4. MBR分区和GPT、NTFS和FAT32、UEFI引导
  5. 神策数据高烨程:消费者数据平台助力企业私域营销
  6. 王利阳:唯品会的“危机”与“反击”
  7. C++之最小堆、最大堆
  8. 【硬件】电脑主机结构 | 总分总
  9. NotificationManager滑动不退出_红米手机常见功能使用技巧大全 一般人我不告诉他!...
  10. 巴比特 | 元宇宙每日必读:潍坊市出台元宇宙发展计划和扶持政策,力争到2026年元宇宙产业规模达到3500亿元...