mac下安装LuaSocket

安装LuaSocket

LuaSocket 是 Lua 的网络模块库,它可以很方便地提供 TCP、UDP、DNS、FTP、HTTP、SMTP、MIME 等多种网络协议的访问操作。它由两部分组成:一部分是用 C 写的核心,提供对 TCP 和 UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。

安装LuaSocket

  • Homebrew安装(如果已经安装略过此步)

首先你要安装Homebrew。安装 Homebrew 很简单,只需在终端上输入一行 Ruby 脚本(所以要先搭建 Ruby 运行环境,Mac 下已经预装了 Ruby)就行:

  1. ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
  • LuaRocks安装 (如果已经安装略过此步)

Mac 下的 Homebrew 居然内置了 LuaRocks 的安装包(之前安装 Lua,用 “brew search lua” 搜 Lua 安装包时无意间发现),因此,在 Mac 下安装 LuaRocks 很简单,一条指令就行:

  1. brew install luarocks -v
  • LuaSocket安装

如果你安装有 Lua 模块的安装和部署工具 – LuaRocks,那么一条指令就能安装部署好 LuaSocket:

  1. luarocks install luasocket

LuaSocket 使用

使用 LuaSocket 很简单,直接用 require 函数加载进来就行,例如输出一个 LuaSocket 版本信息:

  1. local socket = require("socket")
  2. print(socket._VERSION)

模块 LuaSocket 内置的常量、函数的结构图如下:

  1. - sleep [function: 0x7feeeb40f940]
  2. - source [function: 0x7feeeb413570]
  3. - newtry [function: 0x7feeeb40f8c0]
  4. - _VERSION [LuaSocket 2.0.2]
  5. - connect [function: 0x7feeeb4122f0]
  6. - sink [function: 0x7feeeb410ea0]
  7. - __unload [function: 0x7feeeb4107e0]
  8. - bind [function: 0x7feeeb413380]
  9. - _M {.}
  10. - _DEBUG [true]
  11. - skip [function: 0x7feeeb4107b0]
  12. - dns - gethostname [function: 0x7feeeb410af0]
  13. | - tohostname [function: 0x7feeeb410b20]
  14. | - toip [function: 0x7feeeb410aa0]
  15. - gettime [function: 0x7feeeb40f8f0]
  16. - select [function: 0x7feeeb412290]
  17. - BLOCKSIZE [2048]
  18. - sinkt - default [function: 0x7feeeb410e20]
  19. | - close-when-done [function: 0x7feeeb410dc0]
  20. | - keep-open [function: 0x7feeeb410e20]
  21. - sourcet - by-length [function: 0x7feeeb410e50]
  22. | - default [function: 0x7feeeb413440]
  23. | - until-closed [function: 0x7feeeb413440]
  24. - tcp [function: 0x7feeeb412020]
  25. - _NAME [socket]
  26. - choose [function: 0x7feeeb410ce0]
  27. - try [function: 0x7feeeb410ca0]
  28. - protect [function: 0x7feeeb410760]
  29. - _PACKAGE []
  30. - udp [function: 0x7feeeb410fd0]

以 socket 的方式访问获取度娘首页数据:

  1. local socket = require("socket")
  2. local host = "www.baidu.com"
  3. local file = "/"
  4. -- 创建一个 TCP 连接,连接到 HTTP 连接的标准端口 -- 80 端口上
  5. local sock = assert(socket.connect(host, 80))
  6. sock:send("GET " .. file .. " HTTP/1.0\r\n\r\n")
  7. repeat
  8. -- 以 1K 的字节块来接收数据,并把接收到字节块输出来
  9. local chunk, status, partial = sock:receive(1024)
  10. print(chunk or partial)
  11. until status ~= "closed"
  12. -- 关闭 TCP 连接
  13. sock:close()

或者使用模块里内置的 http 方法来访问:

  1. local http = require("socket.http")
  2. local response = http.request("http://www.baidu.com/")
  3. print(response)

以下是一个简单的http方法的例子,用于某学校的网络连接。

  1. local http=require("socket.http");
  2. local request_body = [[username=21451141&password=...]]
  3. local response_body = {}
  4. local res, code, response_headers = http.request{
  5. url = "http://192.0.0.6/cgi-bin/do_login",
  6. method = "POST",
  7. headers =
  8. {
  9. ["Content-Type"] = "application/x-www-form-urlencoded";
  10. ["Content-Length"] = #request_body;
  11. },
  12. source = ltn12.source.string(request_body),
  13. sink = ltn12.sink.table(response_body),
  14. }
  15. print(res)
  16. print(code)
  17. if type(response_headers) == "table" then
  18. for k, v in pairs(response_headers) do
  19. print(k, v)
  20. end
  21. end
  22. print("Response body:")
  23. if type(response_body) == "table" then
  24. print(table.concat(response_body))
  25. else
  26. print("Not a table:", type(response_body))
  27. end

一个简单的 client/server 通信连接

在客户端的终端上敲一些东西后回车会通过 socket 给服务器发送数据,服务器接收到数据后再返回显示在客户端的终端上。一个简单的东西,纯属练手,代码如下:

  1. -- server.lua
  2. local socket = require("socket")
  3. local host = "127.0.0.1"
  4. local port = "12345"
  5. local server = assert(socket.bind(host, port, 1024))
  6. server:settimeout(0)
  7. local client_tab = {}
  8. local conn_count = 0
  9. print("Server Start " .. host .. ":" .. port)
  10. while 1 do
  11. local conn = server:accept()
  12. if conn then
  13. conn_count = conn_count + 1
  14. client_tab[conn_count] = conn
  15. print("A client successfully connect!")
  16. end
  17. for conn_count, client in pairs(client_tab) do
  18. local recvt, sendt, status = socket.select({client}, nil, 1)
  19. if #recvt > 0 then
  20. local receive, receive_status = client:receive()
  21. if receive_status ~= "closed" then
  22. if receive then
  23. assert(client:send("Client " .. conn_count .. " Send : "))
  24. assert(client:send(receive .. "\n"))
  25. print("Receive Client " .. conn_count .. " : ", receive)
  26. end
  27. else
  28. table.remove(client_tab, conn_count)
  29. client:close()
  30. print("Client " .. conn_count .. " disconnect!")
  31. end
  32. end
  33. end
  34. end
  1. -- client.lua
  2. local socket = require("socket")
  3. local host = "127.0.0.1"
  4. local port = 12345
  5. local sock = assert(socket.connect(host, port))
  6. sock:settimeout(0)
  7. print("Press enter after input something:")
  8. local input, recvt, sendt, status
  9. while true do
  10. input = io.read()
  11. if #input > 0 then
  12. assert(sock:send(input .. "\n"))
  13. end
  14. recvt, sendt, status = socket.select({sock}, nil, 1)
  15. while #recvt > 0 do
  16. local response, receive_status = sock:receive()
  17. if receive_status ~= "closed" then
  18. if response then
  19. print(response)
  20. recvt, sendt, status = socket.select({sock}, nil, 1)
  21. end
  22. else
  23. break
  24. end
  25. end
  26. end

感谢D.H.Q的烂笔头

时间: 2024-10-06 11:27:47

mac下安装LuaSocket的相关文章

mac下安装mongoDB

方式一:命令行 MongoDB的安装有好多种安装方法,有普通青年的HomeBrew方式,也有文艺青年的源码编译方式.我只想快速的装起来用一下,所以我选最简单的HomeBrew. 请参考官方文档 : http://docs.mongodb.org/manual/tutorial/install-mongodb-on-os-x/ 更新Homebrew的package数据库,在Mac的终端中输入: $ brew update 然后耐心等待,这个没有任何显示,估计要几分钟,取决于网络的速度.然后就列出了

mac下安装配置java开发环境

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica; color: #000000 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica; color: #000000; min-height: 13.0px } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #

Mac下安装LNMP(Nginx+PHP5.6)环境

Mac下安装LNMP(Nginx+PHP5.6)环境 安装Homebrew 最近工作环境切换到Mac,所以以OS X Yosemite(10.10.1)为例,记录一下从零开始安装Mac下LNMP环境的过程 确保系统已经安装xcode,然后使用一行命令安装依赖管理工具Homebrew ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 之后就可以使用 brew

MAC 下安装 SVN

在mac下安装svn走了很多弯路,进过探索,现在对svn的安装做了总结,可以分为2种: 1.由于 xCode自带svn,所以可以安装xCode 1).打开App Store,搜索xCode,下载安装 打开 Launchpad>其他>终端,输入 svn --version 即可查看svn 版本 2.使用HomeBrew来安装SubVersions 1).安装HomeBrew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercon

Mac下安装 MongoDB

Mac 下安装 MongoDB 一般有两种方法,一种是通过源码安装,一种是直接使用 homebrew ,个人推荐使用 homebrew ,简单粗暴. 1.安装 homebrew : /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 2.使用 homebrew 安装 MongoDB : brew install mongodb 喝杯茶的功夫就

MAC下安装Brew[转]

MAC下安装Brew 1.安装XCode xcode-select --install 2.安装HomeBrew ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 3.检查homebrew是否有冲突等 brew doctor 4.更新Brew sudo brew updatesudo brew upgrade 5.添加其它的源 brew tap homebr

在mac下安装了MySqL + MySQLWorkbench + PyCharm

今天在mac下安装了MySqL  +   MySQLWorkbench + PyCharm 安装这些东西没有在windows下熟悉. 在Mac下安装程序真的不是很适应,感觉很不爽!!!安装完成后还是蛮高兴,后面可以做自己要做的事情了. 通过查阅各种各样的资料,去安装这些东东.最后经过一番周折终于安装完成.下面是对安装过程和遇到的问题做个简单记录. 一.下载MySQL和MySQL Workbench http://dev.mysql.com/downloads/mysql/ 选择合适自己Mac 版

Mac下安装SVN插件javaHL not available的解决方法

在Mac下安装Eclipse插件svnEclipse插件后,每次打开Eclipse都会弹出如下弹出框: 提示你本机缺少JavaHL Library. 选择Eclipse→偏好设置(preference)→Team→SVN,可以看到SVN接口Client的定义如下: 这说明当前系统中缺少JavaHL,需要我们手动安装. subeclipse官网(http://subclipse.tigris.org/wiki/JavaHL 打开可能会非常慢)给出的介绍说有两种方式可以在Mac电脑上(OS X)上安

mac下安装vagrantBox

mac下安装vagrantBox 之前写随笔的时候,都是随便在本地写写,之后拷贝到网上,至于排版格式什么的,都没有处理,虽然只是自己做一个笔记用,但是偶尔也会有人看(??)但是最近我发现,一个不好的排版,是对阅读人的不尊重,我一直都是严格要求自己,所以这次也不例外,所以以后的文章都会用markdown的要求的格式去写. 好了废话补多少,先看今天的主题内容. 先说今天的目的:在mac上安装一个虚拟机,之后在虚拟机中安装环境,然后打包成box,之后就可以使用这个盒子来运行我们的环境,而不用每次在主机