windows环境下利用VS编译luasocket

为了更方便地学习和使用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库

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值