我正在关注教程:http ://www.tutorialspoint.com/ruby/ruby_socket_programming.htm并使用它来设置“简单客户端”。
代码如下:
require 'socket' # Sockets are in standard library
hostname = 'localhost'
port = 2000
s = TCPSocket.open(host, port)
while line = s.gets # Read lines from the socket
puts line.chop # And print with platform line terminator
end
s.close # Close the socket when done
当我执行单个 s.gets 语句时,我从服务器获得了第一条响应行。当我再次执行 s.gets 时,我得到第二条响应行,等等。但是,当我到达响应结束并执行 s.gets 时,程序进入冻结状态。(如果我从 Rails 控制台测试上述程序)。当我运行代码时也会发生同样的情况 - 当 while 语句执行最终的 s.gets 时会发生冻结。关于如何解决这个问题的任何想法?
有关信息:服务器是使用以下 C# 代码发送响应消息的 C# 服务器(响应的每一行都使用相同的代码,并且响应中的最后一行与其他行没有任何区别):
socket.Send(Encoding.ASCII.GetBytes(msg + "\r\n"));
所以我认为客户端冻结,因为它可能无法正确解释服务器的“响应结束”。有任何想法吗?