Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ruby中,我如何只能从TCPSocket读取一行数据?_Ruby_Sockets_Eventmachine - Fatal编程技术网

在Ruby中,我如何只能从TCPSocket读取一行数据?

在Ruby中,我如何只能从TCPSocket读取一行数据?,ruby,sockets,eventmachine,Ruby,Sockets,Eventmachine,我正在使用下面的代码连接到我正在编写的网络服务(由EventMachine支持),在使用一个套接字连接执行多个命令时遇到了一些问题 #!/usr/bin/env ruby require 'socket' opts = { :address => "0.0.0.0", :port => 2478 } connection = TCPSocket.open opts[:address], opts[:port] # Get ID connection.print "ID

我正在使用下面的代码连接到我正在编写的网络服务(由EventMachine支持),在使用一个套接字连接执行多个命令时遇到了一些问题

#!/usr/bin/env ruby

require 'socket'

opts = {
  :address => "0.0.0.0",
  :port => 2478
}

connection = TCPSocket.open opts[:address], opts[:port]

# Get ID
connection.print "ID something"
puts connection.read

# Status
connection.print "STATUS"
puts connection.read

# Close the connection
connection.close
下面是我的EventMachine服务器hander的外观

module ConnectionHandler

  def receive_data data
    send_data "Some output #{data}"
  end
end
然而,我的第一个ruby脚本在执行
连接时挂起。读取
,因为我假定它正在等待连接关闭,这样它就知道它已经获得了所有数据?这不是我想要的

我的套接字服务器将只接收一条命令(在一行上)并返回一行输出


你知道我该怎么做吗?谢谢。

如果服务器发送以\n字符结尾的响应,那么
connection.get
方法将返回接收到的一行数据。因此,我刚刚在我的
发送数据
呼叫的末尾添加了
\n
,并切换到使用
连接。获取
,效果非常好

因此,您应该删除该答案并向上投票并接受另一个答案,因为
put
还添加了换行符。这是公平的。