Ruby TCPSocket请求没有得到响应

时间:2015-10-19 11:26:57

标签: ruby sockets tcpsocket

我一直在TutorialsPoint读取TCPSockets,我需要一个简单的客户端来发出请求,但我不会混淆为什么没有响应。

网站API登录

  

在   login命令接受JSON对象作为参数,后跟响应的EOT字符。

来自网站的API

这就是我所拥有的

def connect
    url = "someurl.com"
    port = 19534 
    loginRequest = 'login {"protocol":1,"client":"testruby","clientver":0.1}' +"\04"

    s = TCPSocket.open(url,port)

    s.puts(loginRequest)
    while line = s.gets
        puts line.chop
    end
puts "end"
s.close
end
connect

我的尝试

1)我在终端中运行ruby代码,但我与服务器的连接立即关闭。

我完全无能为力,并会对此表示赞赏。

1 个答案:

答案 0 :(得分:2)

服务器似乎正在使用原始TCP / IP,使用0x04字符表示"消息结束"。

您的代码似乎更喜欢阻止IO(尽管它可能不是我的首选),所以请允许我建议阻止API调整:

require 'socket'

module VNDB
   public

   def send_message message
      raise "Not connected" unless @s
      @s.write (message + "\x04")
   end

   def get_message
      raise "Not connected" unless @s
      message = ''
      message << @s.getc until message[-1] == "\x04"
      message
   end

   def connect
       url = "someurl.com"
       port = 19534 
       loginRequest = 'login {"protocol":1,"client":"testruby","clientver":0.1}' +"\04"

       @s = TCPSocket.open(url,port)

       send_message loginRequest
       puts get_message
       puts "end"
       @s.close
       @s = nil
   end
   extend self
end

VNDB.connect

P.S。

  1. 我无法测试代码,因为&#34; someurl.com&#34;我想这不是真正的地址。

  2. 数据库服务器不使用Websockets(这是协议的名称),因此请考虑编辑您的问题并删除该标记。