2017-02-07 9 views
0

Серверная Программаклиент-сервер в чате в Lua

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 

Клиентская программа

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() 

Программа сервера может отправить сообщение клиенту, но клиент не может отправить сообщение на сервер. Есть ли способ это сделать .. ??

+0

'tcp: connect (host, port);' требует, чтобы 'host' не был' * '. – hjpotter92

+1

Возможно, вы не отправляете данные через 10 секунд после подключения? – moteus

+1

Можете ли вы более подробно рассказать о том, что именно происходит? Я вижу, сервер может отправлять что-нибудь только при получении некоторых данных с сервера? – Prabhu

ответ

1

У меня недостаточно репутации для комментариев, но через 10 секунд или сервер, отправляющий сообщение, в зависимости от того, что наступит раньше, сервер закрывает соединение. Клиент не пытается отправить сообщение до тех пор, пока сервер не отправит сообщение, и то, как вы написали код, сервер немедленно закрывает соединение в этот момент. Если вы хотите, чтобы два общаться вы бы лучше принимать клиент вне цикла, как так: Программа

сервера

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() 

Теперь, это поднимает вопрос, в котором сервер испытывает недостаток коды для реализации клиент отключил и должен найти нового клиента, однако его не должно быть так сложно реализовать.

+0

** Спасибо за его работу, но сообщение клиента на сервер отображается только после того, отправил что-то клиенту, т. е. порядок чата неверен ** – Neenu