TCPSocket连接被对等方重置

时间:2018-11-15 08:39:26

标签: ruby ssl tcp websocket betfair

require 'socket'
socket = TCPSocket.open('stream-api.betfair.com', '443') 
while line = socket.gets
  puts line.chop
end
socket.close

I should receive类似于{"op":"connection","connectionId":"002-230915140112-174"}

但是我收到Connection reset by peer

  

表示远端将发送一个重置数据包(RST)来终止连接而无需有序关闭(关闭)。在那种情况下,您知道它是对等方(客户端)。

betfair包括a nodejs examplecsharp/java examples

非常感谢您的帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

首先,您应该将字符串'443'替换为整数:

TCPSocket.open('stream-api.betfair.com', 443)

无论如何,这似乎与SSL协商有关:以下Stackoverflow帖子给出了可行的方法的简要说明:How to establish a SSL enabled TCP/IP Connection in Ruby。使用这种方法,我可以工作。

require 'socket'
require 'openssl'

host = 'stream-api.betfair.com'
port = 443

socket = TCPSocket.open(host,port)
ssl_context = OpenSSL::SSL::SSLContext.new()
ssl_context.ssl_version = :SSLv23
ssl_socket = OpenSSL::SSL::SSLSocket.new(socket, ssl_context)
ssl_socket.sync_close = true
ssl_socket.connect
while line = ssl_socket.gets
  p line
end
ssl_socket.close

结果:

"{\"op\":\"connection\",\"connectionId\":\"001-151118094105-259478\"}\r\n"

在某些时候,使用SSL / TLS保护的连接来处理Ruby是很冗长的。在您提供的示例中,在NodeJS中,提示是第一行:

var tls = require('tls');