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" 并且不知道它是否是整行。所以它永远等待客户端从未发送的换行符。
我正在学习 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" 并且不知道它是否是整行。所以它永远等待客户端从未发送的换行符。