Lua tcp demo

Lua

本来是应该昨天发的,今天补上。

算是最简单的socket例子。

client

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
local socket = require("socket")
host = "127.0.0.1"
port = 8383
-- open a tcp connect,
-- method socket.connect(), means client
c = assert (socket.connect (host, port))
c:send ("request...\n")
while (true) do
local s, status, partial = c:receive ()
print(s)
if status == "closed" then break end
c:send ("request...\n")
end
c:close ()

server

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
socket = require("socket");
-- IP & port
host = "127.0.0.1";
port = "8383";
-- method socket.bind(), means client
server = assert(socket.bind(host, port));
msg = "from server...\n";
while 1 do
print("server: waitting for connection...");
-- return a client representing
control = assert(server:accept());
while 1 do
command,status = control:receive();
if status == "closed" then break end
print(command);
control:send(msg);
end
end

Lua tcp

Lua

TCP

socket.tcp()

使用bind()-listen()方法后,将master TCP对象转化为一个server 对象;使用connect()方法后,将master TCP对象转化为一个client对象。

此外,master TCP对象仅仅提供了断开连接的close()方法。

@return 成功时,返回一个新的master TCP对象;异常时,返回nil,并显示错误信息。

server:accept()

等待远程server的连接,并返回一个代表这个连接的client对象。

@return 远程server连接成功时,返回一个client对象;timeout或者其他连接失败时,返回nil,并显示错误信息。

master:bind(address, port)

address可以是IP或者主机名,port必需是0~64k。如果address是“*”,系统会用INADDR_ANY常数注册地址。如果port是0,则自动分配端口。

@return 成功返回1,失败返回nil,打印错误信息。

master:close()

client:close()

server:close()

关闭该对象使用的socket连接,并对其他应用开放被这个对象注册的本地地址。

client:receive([pattern [, prefix]])

根据读取模式(pattern)从client对象中读取数据。模式遵循LUA的file I/O格式。