2013-08-13 10 views
2

Я пытаюсь создать TCP клиент в LuaОшибка при создании клиента TCP в Lua

local host, port = HOST, PORT 
local socket = require("socket") 
client = socket.tcp(); 
client:connect(host, port); 
client:send("Hello User"); 

это работает нормально, но когда я добавить

while true do 
    local s, status, partial = client:receive() 
    print(s or partial) 
    if status == "closed" then break end 
end 

для чтения данных из сокета он блокирует полное выполнение код.

+0

Чтобы быть ясным, он блокирует прием? Это делает это, даже если вы убиваете соединение? – Alex

ответ

1

По умолчанию все операции ввода-вывода luasocket блокируются. Чтобы отключить блокировку, вам необходимо использовать socket.settimeout(0) (settimeout). Затем вы можете проверить значение «timeout», возвращаемое как статус, и действовать соответствующим образом.

В зависимости от того, как отправляются данные, this answer также может иметь значение.

+0

Я попробовал settimeout (0), но с помощью этого запроса не блокируется, но это всегда возвращает данные. – Saurav

+0

Проверьте ссылку на ответ SO, который я включил, поскольку вы, кажется, не добавляете «\ n» к своим сообщениям, а 'receive' по умолчанию ожидает линию, завершенную новой строкой. Поскольку он не получает его, он не возвращает никаких данных (хотя он может возвращать частичные результаты). –