sách gpt4 ai đã đi

networking - luasocket 的 settimeout() 是如何工作的?

In lại 作者:可可西里 更新时间:2023-11-01 02:34:43 25 4
mua khóa gpt4 Nike

我有以下代码:

function Server:run()
print("Running.")
self.running = true
while self.running do
if self.client == nil then
self.client = self.socket:accept()
print("Client connected.")
self.client:settimeout(10)
kết thúc
local line, err = self.client:receive()
if err then
print("Error: " .. err)
elseif line == "quit" then
print("Quitting.")
self.client:close()
self.running = false
khác
print("Received: " .. line)
kết thúc
kết thúc
self:terminate()
kết thúc

我希望当调用 self.client:receive() 时,服务器将等待 10 秒或直到它收到一条消息,然后继续它的方式。

但是,这不是我遇到的行为。服务器会立即生成超时错误,而不管超时设置为什么值,并且根本不等待来自客户端的消息。

我怀疑我误解了什么。任何见解都会受到赞赏。谢谢。


完整代码在这里:

服务器:http://pastie.org/9659701

主要:http://pastie.org/9659703


1 Câu trả lời

该代码按预期对我有效(Windows、LuaJIT 2.0.2、luasocket 3.0-rc1);我测试了以下独立脚本:

local socket = require "socket"
local server = assert(socket.bind("*", 3333))
local client = server:accept()
print("accepted connection; waiting for data...")
client:settimeout(10)
local start = os.time()
local line, err, partial = client:receive("*l")
if line then
print(("received '%s'; echoing back..."):format(line))
client:send(line.."\n")
khác
print(("received error '%s' after %.2f seconds."):format(err, os.time()-start))
kết thúc
client:close()

您可以运行 telnet localhost 3333 并且应该会看到“已接受连接;正在等待数据...”;如果我不发送任何内容,我会收到“10.00 秒后收到错误‘超时’。”,这正是我所期望的。

我会检查是否存在逻辑错误,self.client 在您的情况下永远不会是 không 并且您不会调用 settimeout。如果这仍然没有帮助,请制作一个我们可以使用 love2d 运行的独立示例(例如,我看不到您在哪里调用 bind).

关于networking - luasocket 的 settimeout() 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26429151/

25 4 0
可可西里
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com