Ruby TCPSocket通信

Ruby TCPSocket communication

我正在学习 TCPSocket 并编写了一个简单的服务器:

require 'socket'

server = TCPServer.open(2000)

loop {
  client = server.accept
  p client.gets
  client.print("bar")
  client.close
}

和编写的简单客户端:

require 'socket'

hostname = 'localhost'
port = 2000
socket = TCPSocket.open(hostname, port)

socket.print("foo")
p socket.gets

当我 运行 这些在单独的终端中与服务器或客户端以一种方式通信时(即一个 "prints" 和另一个 "gets")我在另一个上得到预期的字符串边。当我 运行 写这些时,客户端首先 "print" 向服务器发送一条消息,然后服务器 "gets" 向其发送 "print" 一个字符串给客户端,它只是挂起。是什么导致了这个问题?

您的程序执行以下操作:

客户端与服务器建立连接

客户端

  • 调用 print("foo") - 恰好 3 个字节被传输到服务器。
  • 调用获取 - 等待来自服务器的数据,但服务器从不发送任何数据。

服务器端

  • 调用获取 - ruby 函数获取解析流数据,它总是 return 整行。但是服务器只收到 "foo" 并且不知道它是否是整行。所以它永远等待客户端从未发送的换行符。