【问题标题】:Ruby TCPSocket communicationRuby TCPSocket 通信
【发布时间】:2015-09-05 21:51:30
【问题描述】:

我正在学习 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

当我在单独的终端中运行这些时,服务器或客户端以一种方式通信(即一个“打印”,另一个“获取”),我在另一侧得到预期的字符串。当我按照所写的方式运行这些时,客户端首先“打印”一条消息给服务器,然后服务器“获取”它然后“打印”一个字符串给客户端,它只是挂起。是什么导致了这个问题?

【问题讨论】:

    标签: ruby sockets server client tcpsocket


    【解决方案1】:

    您的程序执行以下操作:

    客户端和服务器之间建立连接。

    客户端

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

    服务器端

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

    【讨论】: