2017-02-07 358 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