2

我正在尝试通过 Ruby 上的 TCP 发送和“消息”对象,而我的客户端类根本看不到任何东西。我究竟做错了什么?

我的消息类(我正在尝试发送)

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
4

2 回答 2

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
于 2013-02-24T02:31:21.710 回答
0

您需要序列化您的对象。最便携的方法是使用 YAML。首先,需要yaml库:

require "yaml"

比,替换s.print(message)s.print(YAML.dump(message)).

于 2013-02-24T02:07:12.073 回答