我正在尝试通过TCP在Ruby上发送和“消息”对象,而我的客户端类根本看不到任何事情。我做错了什么?
我的消息类(我正在尝试发送)
class Message
attr_reader :host_type, :command, :params
attr_accessor :host_type, :command, :params
def initialize(host_type, command, params)
@host_type = host_type
@command = command
@params = params
end
end
我的“服务器”类
require 'socket'
require_relative 'message'
class TCP_connection
def start_listening
puts "listening"
socket = TCPServer.open(2000)
loop {
Thread.start(socket.accept) do |message|
puts message.command
end
}
end
def send_message
hostname = 'localhost'
port = 2000
s = TCPSocket.open(hostname, port)
message = Message.new("PARAM A", "PARAM B", "PARAM C")
s.print(message)
s.close
end
end
答案 0 :(得分:4)
下面是通过json进行客户端服务器通信的示例。你会期待像RuntimeError: {"method1"=>"param1"}
这样的东西。而不是引发错误,用服务器逻辑处理这个json。
服务器强>
require 'socket'
require 'json'
server = TCPServer.open(2000)
loop {
client = server.accept
params = JSON.parse(client.gets)
raise params.inspect
}
<强>客户端强>
require 'socket'
require 'json'
host = 'localhost'
port = 2000
s = TCPSocket.open(host, port)
request = { 'method1' => 'param1' }.to_json
s.print(request)
s.close
答案 1 :(得分:0)
您需要序列化您的对象。最便携的方法是使用YAML。首先,需要yaml
库:
require "yaml"
比,将s.print(message)
替换为s.print(YAML.dump(message))
。