Ruby TCPServer套接字

Mar*_*lly 4 ruby tcpsocket tcpserver

也许我已经把我的套接字编程方式混淆了,但不应该像这样的工作吗?

srv = TCPServer.open(3333)
client = srv.accept

data = ""
while (tmp = client.recv(10))
    data += tmp
end
Run Code Online (Sandbox Code Playgroud)

我几乎尝试了从客户端TCPSocket"获取"数据的所有其他方法,但所有这些方法都挂起并且永远不会突破循环(getc,get,read等).我觉得我忘记了什么.我错过了什么?

Edu*_*Edu 8

为了使服务器写得很好,您需要:

  • 事先知道将要传达的数据量:在这种情况下,您可以使用该方法read(size)而不是recv(size).read阻塞,直到收到总字节数.
  • 有一个终止序列:在这种情况下,你保持一个循环,recv直到你收到一个字节序列,表明通信结束.
  • 让客户端在完成通信后关闭套接字:在这种情况下,read将返回部分数据或0,recv并返回0大小的数据data.empty?==true.
  • 定义通信超时:您可以使用该功能select,以便在一段时间后没有进行通信时获得超时.在这种情况下,您将关闭套接字并假设每个数据都已通信.

希望这可以帮助.