2013-05-09 22 views
1

我有下面的代码位于一个循环内(简体)。 cscc是连接到本地主机上的服务器的客户端套接字。我的服务器向客户端发送单个字符。但是,我似乎没有正确接受它。协议是TCP。lua socket多次接收报告相同的数据

rect, _, st = socket.select({cscc}, nil, .5) 

    if(rect[cscc] ~= nil) then 
     data, err, part = csc:receive(512) 
     if(part ~= nil) then 
      print(err.." : "..part) 
     end 
     socket.sleep(1) 
    end 

当角色从服务器发送,我得到下面的行重复作为输出:

timeout :

明显,部分不为空在这里。这里发生了什么?为什么我一遍又一遍地收到同样的东西?

+1

也许你正在收到一个不可打印的字符(或在开头为'0')?你有没有测试零件的尺寸?也许这个字符串是空的? – 2013-05-09 11:03:46

回答

2

也许服务器从来没有真正发送过任何数据。检查part是否为非空,并查看如果不将第三个参数传递给socket.select会发生什么情况。

0

的LuaSocket参考文档说:

“以错误的情况下,该方法返回nil紧随其后的错误消息,其可以是字符串‘闭合’[...]或字符串“超时'如果在操作过程中发生超时,并且在错误消息之后,该功能返回发送的部分结果。“

空字符串将被视为“部分结果”。


(part and #part > 0)尝试测试,这将检查部分是非nil,然后检查是否实际上包含任何字节。

也可能值得使用netcat或类似的方法检查,以确保您的服务器实际上正在发送您期望的数据。

相关问题