luasocket通讯

来源:互联网 发布:中国国库有多少钱知乎 编辑:程序博客网 时间:2024/05/22 05:25

client.lua

#!/usr/bin/env luaprint "\nclient begin\n"local socket = require("socket")local host = "127.0.0.1"local port = 7777--打开一个tcp连接c = assert(socket.connect(host, port))c:send("I am client\n")while true dolocal s, status, partial = c:receive()print (s)if status == "closed" thenbreakendc:send("client closed\n")endc:close()print "\nclient end\n"
server.lua

#!/usr/bin/env lualocal socket = require("socket")local host = "127.0.0.1"local port = 7777local ack = "ack\n"local server = assert(socket.bind(host, port))while true doprint("server:waiting for client connection...")local control = assert(server:accept())while true docommand, status = control:receive()if status == "closed" thenbreakendprint(command)control:send(ack)endend



简单的聊天程序:

client.lua

#!/usr/bin/env lualocal socket = require("socket") local host = "127.0.0.1"local port = 12345local sock = assert(socket.connect(host, port))sock:settimeout(0)  print("Press enter after input something:") local input, recvt, sendt, statuswhile true do    input = io.read()    if #input > 0 then        assert(sock:send(input .. "\n"))    end         recvt, sendt, status = socket.select({sock}, nil, 1)    while #recvt > 0 do        local response, receive_status = sock:receive()        if receive_status ~= "closed" then            if response then                print(response)                recvt, sendt, status = socket.select({sock}, nil, 1)            end        else            break        end    endend

server.lua

#!/usr/bin/env lualocal socket = require("socket") local host = "127.0.0.1"local port = "12345"local server = assert(socket.bind(host, port, 1024))server:settimeout(0)local client_tab = {}local conn_count = 0 print("Server Start " .. 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             endend