Ruby TCPServer获取客户端IP地址

3
这是我的无法工作的脚本(只是卡住了……)
require 'socket'
server = TCPServer.new 2000

loop do
  Thread.start(server.accept) do |client|
    sock_domain, remote_port, remote_hostname, remote_ip = server.peeraddr
    client.puts "Hello !"
    client.puts "Time is #{Time.now}"
    puts "connection coming from #{remote_ip} and port #{remote_port}"
    client.close
  end
end

我想要输出连接客户端的IP,但是连接已经建立了,却没有任何反应。

1个回答

7

代码没问题,除了这个:

sock_domain, remote_port, remote_hostname, remote_ip = server.peeraddr

应该是这样的:
sock_domain, remote_port, remote_hostname, remote_ip = client.peeraddr
                                                       ^^^^^^

客户端的peeraddr文档在哪里?我在这里看不到: https://ruby-doc.org/stdlib-2.1.9/libdoc/openssl/rdoc/OpenSSL/SSL/SSLSocket.html - jacksonecac
它是TCPSocket的一部分,而TCPSocket是IPSocket的类:http://ruby-doc.org/stdlib-2.0.0/libdoc/socket/rdoc/IPSocket.html#method-i-peeraddr。SSLSocket只是一个IO包装器,您需要查询底层套接字,而不是包装器。 - Casper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接