luasocket 拓展库提供了tcp 模块,该模块提供一些操作,非常简单.但是不知道为什么源代码中的例子有错误.
简单写了一个luasocket tcp 协议的例子,代码如下:
tcpsample.lua 代码:
--绑定地址和端口号 host = host or "127.0.0.1" port = port or 8080 --创建tcp对象,方式和udp创建类似,通过metatable 设置类方法 tcp =socket.tcp() --绑定地址和端口号到指定tcp对象上 e=tcp:bind(host, port) if(e and e==1)then print("Binding to host '" ..host.. "' and port " ..port.. "...") else print("bind err") end i, p = tcp:getsockname() --监听绑定地址和端口号,排队设置为50 e =tcp:listen(50) if(e and e ==1)then print("listen to host '" ..host.. "' and port " ..port.. "...") else print("listen err") end print("Waiting connection from talker on " .. i .. ":" .. p .. "...") ctcp =nil --等待一个客户端链接进来 while 1 do client = tcp:accept() print(client) if(client~=nil)then ctcp =client print("accept success") break else print("accept err") end end --有客户端成功链接进来 print(ctcp) while 1 do --阻塞,等待有至少10个字节进入 revbuff=ctcp:receive(10) --向客户端发送数据 ctcp:send("你好") end
tcpsample.cpp代码如下:
extern "C" { #include <lua.h> #include <lualib.h> #include <lauxlib.h> #include <luasocket.h> } //加入winsock库 #pragma comment(lib, "WS2_32") // 链接到WS2_32.lib int main( int argc, char *argv[] ) { lua_State* L = lua_open(); luaopen_base(L); luaopen_socket_core(L); luaL_dofile(L, "tcpsample.lua"); lua_close(L); return 0; }
运行结果如下:
代码非常简洁,接下来的例子,我们将深入luasocket 源代码部分. 尤其对luasocket select IO模式的讲解.对select IO 模型不熟悉的,赶快充电..渍渍渍渍....
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-12 06:09:22