0

我的应用程序中有一个自定义类,它使用服务器创建一个套接字并从服务器读取输出。问题是输出不正确。因为我看到的输出是在 ssl 加密下,当我读到它时它是错误的。

这是我创建 ssl 连接的女巫的方法

  def self.feedback_connection
    raise "The path to your pem file is not set. (APNS.pem = /path/to/cert.pem)" unless self.pem
    raise "The path to your pem file does not exist!" unless File.exist?(self.pem)

    context      = OpenSSL::SSL::SSLContext.new
    context.cert = OpenSSL::X509::Certificate.new(File.read(self.pem))
    context.key  = OpenSSL::PKey::RSA.new(File.read(self.pem), self.pass)

    fhost = self.host.gsub('gateway','feedback')
    puts fhost

    sock         = TCPSocket.new(fhost, 2196)
    sock.setsockopt Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, true
    ssl          = OpenSSL::SSL::SSLSocket.new(sock,context)
    ssl.sync = true
    ssl.connect

    return sock, ssl
  end

然后,在我的主要方法中

  def self.feedback
    sock, ssl = self.feedback_connection

    apns_feedback = []

    while line = sock.gets # Read lines from the socket << the problem is here
      line.strip!
      f = line.unpack('N1n1H140')       
      apns_feedback << [Time.at(f[0]), f[2]]
    end

    ssl.close
    sock.close

    return apns_feedback
  end

在线:while line = sock.gets如果我使用sock.gets我得到编码的字符串。如果我使用ssl.read(38)this 返回 null。

我当时需要读取 38 个字节,在这种情况下:

1..4 => timestamp (big endian)
5..6 => length (big endian)
7..38 => token (binary) quoting: The token in binary format.

所以我的问题是:使用 ssl 我根本无法读取,每次使用套接字时我得到一个不同的字符串

我该怎么做才能阅读正确的信息?

4

1 回答 1

0

发现了问题。

服务器没有发送任何东西,因为 ssl 协议,ssl 中的空响应在没有 ssl 的情况下是不可读的。

检查后,一切正常。

于 2013-03-20T14:01:57.493 回答