首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lua中的Client-Server聊天

Lua中的Client-Server聊天
EN

Stack Overflow用户
提问于 2017-02-07 15:02:28
回答 1查看 777关注 0票数 0

服务器程序

代码语言:javascript
复制
local socket = require("socket")
local server = socket.try(socket.bind("*", 1234))
local ip, port = server:getsockname()
while 1 do
    local client = server:accept()
    client:settimeout(10)
    local line, err = client:receive()
    print (line)
    print("Enter input:")
    if not err then client:send(io.read().."\n")  end
    client:close()
end  

客户端程序

代码语言:javascript
复制
local host, port = "*", 1234
local socket = require("socket")
local tcp = assert(socket.tcp())
tcp:connect(host, port);
tcp:send("Connection Established\n");
while 1 do
    local s, status, partial = tcp:receive()
    print(s or partial)
    print("Enter input:")
    tcp:send(io.read().."\n");
    if status == "closed" then break end 
end
tcp:close()

服务器程序可以向客户端发送消息,但客户端不能向服务器发送消息。有没有办法……??

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-10 06:31:07

我没有足够的名气来评论,但在10秒或服务器发送消息后,服务器关闭了连接。在服务器发送消息之前,客户端不会尝试发送消息,并且按照您编写代码的方式,服务器会在此时立即关闭连接。如果你想让两者进行通信,最好在循环之外接受客户端,如下所示:

服务器程序

代码语言:javascript
复制
local socket = require("socket")
local server = socket.try(socket.bind("*", 1234))
local ip, port = server:getsockname()
local client = server:accept()
client:settimeout(10)
while 1 do
    local line, err = client:receive()
    print (line)
    print("Enter input:")
    if not err then client:send(io.read().."\n")  end
end
client:close()

现在,这带来了一个问题,即服务器缺乏代码来实现客户端已断开连接,并需要找到新的客户端,但是实现起来应该不是那么困难。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42083665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档