为了更方便地学习和使用skynet框架,本地用lua写个简易客户端进行测试,也是个不错的选择。
前提是你在windows上编译了一份动态库版本的lua,以下以vs2017编译器为例。
动态库版本lua5.3.5一份,如果没有,我的之前博客:vs2017编译Lua最新源码,生成动态链接库版本
下载地址:
https://github.com/diegonehab/luasocket.git
用vs2017打开luasocket.sln解决方案
根据该解决方案的属性,它是根据几个环节变量来确定lua的头文件所在目录,lib库的名字和位置,为了简化操作,这里直接在vs工程里添加lua的头文件和lib库位置以及lib库名称,即可完成编译,在windows上无需设置环境变量。
这里统一设置成Release x64版本
其中bin目录中文件为:
注意这些文件的大小,动态库版本和静态库版本看exe和dll大小是可以区分开的。
src目录文件:
在vs工程中进行以下操作
对这两个子项目都进行以下三步设置:
第一步:添加lua头文件路径
第二步:添加lua的lib库位置
第三步:修改附件依赖项中的lib库名
编译,会看到:
这两个文件夹中均有core.dll生成
将这两个文件夹,包含其中的core.dll都放到lua可以找到的路径。
比如:
可以将这两个文件夹放到D:\Program Files\lua-5.3.5\bin目录下,也可以放到其他路径下。
为了演示,我这里把它放到外面:
3rd文件中存放:
lua文件中新建一个socket文件夹
将
这些lua文件拷贝到:
例子一:
package.path = "D:/Program Files/lua-5.3.5/lua/?.lua;D:/Program Files/lua-5.3.5/lua/socket/?.lua"
package.cpath = "D:/Program Files/lua-5.3.5/3rd/?.dll"
local socket = require("socket")
local mime = require("mime")
print("Hello from " .. socket._VERSION .. " and " .. mime._VERSION .. "!")
运行结果:
Hello from LuaSocket 3.0-rc1 and MIME 1.0.3!
说明package.path是为了演示,没有加到环境变量中,大家遇到找不到相关模块的时候,也可以这样将搜索路径添加进来
例子二:
server.lua
-- server.lua
package.path = "D:/Program Files/lua-5.3.5/lua/?.lua;D:/Program Files/lua-5.3.5/lua/socket/?.lua"
package.cpath = "D:/Program Files/lua-5.3.5/3rd/?.dll"
local socket = require("socket")
local host = "127.0.0.1"
local port = "12345"
local server = assert(socket.bind(host, port, 1025))
server:settimeout(0)
local client_tab = {}
local conn_count = 0
print("服务器开启 " .. host .. ":" .. port)
while 1 do
local conn = server:accept()
if conn then
conn_count = conn_count + 1
client_tab[conn_count] = conn
print("服务器 A client successfully connect!")
end
for conn_count, client in pairs(client_tab) do
local recvt, sendt, status = socket.select({client}, nil, 1)
if #recvt > 0 then
local receive, receive_status = client:receive()
if receive_status ~= "closed" then
if receive then
assert(client:send("Client " .. conn_count .. " Send : "))
assert(client:send(receive .. "\n"))
print("Receive Client " .. conn_count .. " : ", receive)
end
else
table.remove(client_tab, conn_count)
client:close()
print("Client " .. conn_count .. " disconnect!")
end
end
end
end
本博客的代码我已经放到这里:(win10,vs2017)
链接:https://pan.baidu.com/s/1W1GaCnDXsikw2NkcFPKU-A
提取码:9er6
复制这段内容后打开百度网盘手机App,操作更方便哦
这里有个功能更全的例子:
windows环境下编译luasocket + lua5.3
require “socket” 引发的一些问题
lua中使用luasocket通信,写了一个简单的事件库
使用Lua的扩展库LuaSocket用例
luasocket系列: luasocket tcp
Lua Socket在Windows平台下的使用
windows 环境下,为lua添加luasocket库