lua中配置luasocket,并且做成一个socket服务器,主要用于(D'Fusion Studio)中
2012-08-10 14:20
316 查看
首先,去luasocket官方网站下载,http://files.luaforge.net/releases/luasocket/luasocket/luasocket-2.0.2,我下载的版本是luasocket-2.0.2-lua-5.1.2-Win32-vc8.zip,能够很好的支持lua5.1.
如图所示:
在你的工程中需要加入lua文件夹,mime文件夹,socket文件夹,我的开发工具主要是D'Fusion Studio,主要用来做增强现实的。我把它们放到我的工程的lib文件夹中。
直接就是我做的一个监听服务器,上代码如下,这样我们在来慢慢说需要注意的地方:
需要注意的地方:
1、环境变量配置。我在这直接更改的lua的运行环境变量。
local lua_cpath1 = scriptPath.."lib\\?.dll" --路径设置是一定要是这样设置,否则会出现错误,要不在查找“socket.core"出现错误
local lua_path1 = scriptPath.."lib\\lua\\?.lua;"..scriptPath.."lib\\lua\\socket\\?.lua"
package.path = package.path ..";"..lua_path1
package.cpath = package.cpath ..";"..lua_cpath1
要特别注意配置dll路径的时候,必须要配置成scriptPath.."lib\\?.dll" ,"<scriptPath>\lib\"中放着luasocket的3个文件夹,只有这样配置才能运行成功,因为在socket.lua文件中有一个require(“socket.core"),当调用它时,它就会自动的到<scriptPath>\lib\socket\core.dll中查找相关的函数。如果对这部分不懂的话,查找相关require的用法。
2、server:settimeout(0)与user:settimeout(0),设置这一部分之后,程序就会成为非阻塞的。
3、最为重要的,当客户端像此服务器发送消息的时候,发送的文本必须以'\n'结束,否则服务器这边将收不到消息。这部分我当时不知道调试了很久才调试成功的。
如图所示:
在你的工程中需要加入lua文件夹,mime文件夹,socket文件夹,我的开发工具主要是D'Fusion Studio,主要用来做增强现实的。我把它们放到我的工程的lib文件夹中。
直接就是我做的一个监听服务器,上代码如下,这样我们在来慢慢说需要注意的地方:
local scriptPath = getScriptDirectory() LOG(scriptPath) local lua_cpath1 = scriptPath.."lib\\?.dll" --路径设置是一定要是这样设置,否则会出现错误,要不在查找“socket.core"出现错误 local lua_path1 = scriptPath.."lib\\lua\\?.lua;"..scriptPath.."lib\\lua\\socket\\?.lua" --LOG(package.cpath) --LOG("\n\n") --LOG(package.path) package.path = package.path ..";"..lua_path1 package.cpath = package.cpath ..";"..lua_cpath1 local socket = require('socket') LOG("Socket Version: "..socket._VERSION) local port = 8885 local server = assert(socket.bind("192.168.110.82",port)) local i,p = server:getsockname() server:settimeout(0)--设置超时时间为0,这样就可以为非阻塞 assert(i, p) LOG("Waiting connection from talker on " .. i .. ":" .. p .. "...") local client = {} local clientCount = 0 repeat --LOG("START") --server:settimeout(0) local c = server:accept() coroutine.yield() --coroutine.yield() if c then local clientStr = c:getpeername() LOG("Connected. Here is the stuff:"..clientStr) clientCount = clientCount+1 client[clientCount] = c LOG("clientCount:"..clientCount) end --coroutine.yield() --coroutine.yield() for n,user in pairs(client) do --LOG("n = "..n) user:settimeout(0)--需要这一个 local l, e = user:receive() if l then LOG(l)--打印l发送过来的值 e为错误信息 local recStr = "Receiveing:"..l text:setText(recStr) if e then LOG("value = "..e ) end end end until coroutine.yield()
需要注意的地方:
1、环境变量配置。我在这直接更改的lua的运行环境变量。
local lua_cpath1 = scriptPath.."lib\\?.dll" --路径设置是一定要是这样设置,否则会出现错误,要不在查找“socket.core"出现错误
local lua_path1 = scriptPath.."lib\\lua\\?.lua;"..scriptPath.."lib\\lua\\socket\\?.lua"
package.path = package.path ..";"..lua_path1
package.cpath = package.cpath ..";"..lua_cpath1
要特别注意配置dll路径的时候,必须要配置成scriptPath.."lib\\?.dll" ,"<scriptPath>\lib\"中放着luasocket的3个文件夹,只有这样配置才能运行成功,因为在socket.lua文件中有一个require(“socket.core"),当调用它时,它就会自动的到<scriptPath>\lib\socket\core.dll中查找相关的函数。如果对这部分不懂的话,查找相关require的用法。
2、server:settimeout(0)与user:settimeout(0),设置这一部分之后,程序就会成为非阻塞的。
3、最为重要的,当客户端像此服务器发送消息的时候,发送的文本必须以'\n'结束,否则服务器这边将收不到消息。这部分我当时不知道调试了很久才调试成功的。
相关文章推荐
- 在JAVA中利用SOCKET创建一个用于收发报文的长连接服务器
- 服务器测试代码 主要用于新平台的socket的测试
- 如何安全地配置一个生产环境的MongoDB服务器?
- 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。
- 【windows】 配置一个本地的tomcat服务器
- 【tcp网络编程】用Socket建立一个简单的文本转换服务器
- ruby 项目部署到服务器时,配置文件(jss,css..)改变,需要执行一个命令
- SQL无法连接到 (local)。在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连
- RestKit ,一个用于更好支持RESTful风格服务器接口的iOS库
- eclipse下配置Tomcat,并且把项目部署到Tomcat服务器上
- 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命名管
- win7+iss7的配置,以及如何在本地IIS服务器挂载一个网站
- 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。
- 不在同一个内网的本机通过SecureCrt配置,访问服务器的应用(应用设置仅允许内网之间能访问)
- 基于非阻塞socket的多线程服务器的实现------一个服务器如何与多个客户端进行通信?
- 分享一个jquery插件-主要用于显示微博人的图像和鼠标提示等poshytip
- 如何使用集成了ESP8266芯片的NodeMCU以配置一个可交互的TCP服务器?
- 2.每获取一个socket,就创建一个线程用于处理这个socket。
- Apache服务器主要配置文件httpd.conf中文注释
- Java_socket程序学习03-一个客户端对一个服务器-交互(服务器端)--01