socket使用localhost但不是127.0.0.1连接

时间:2016-02-11 01:45:12

标签: ruby sockets

我有以下代码

require 'socket'


def connect(socket)
  while line = socket.gets # Read lines from socket
    puts line         # and print them
  end
  socket.close             # close socket when done

end

def serve(server)
  loop do
    client = server.accept    # Wait for a client to connect
    client.puts "Hello !"
    client.puts "Time is #{Time.now}"
    client.close
  end
end


if ARGV[0] == "-s"
  ip_port = ARGV[1]
  server = TCPServer.new  ip_port
  serve(server)
elsif ARGV.length == 2
  ip_address = ARGV[0]
  ip_port = ARGV[1]
  puts ip_address
  puts ip_port
  socket = TCPSocket.new ip_address , ip_port
  connect(socket)
else
  puts "PLease enter an IP address and IP port"
end

上面的代码是基本的服务器和客户端。使用-s标志告诉程序就像服务器一样。

当我使用localhost作为地址但当我使用127.0.0.1作为地址时不起作用时,此代码有效。我使用127.0.0.1时收到No connection could be made because the target machine actively refused it. - connect(2)错误。我想知道是否有人知道问题所在。

1 个答案:

答案 0 :(得分:1)

我认为代码本身没有任何问题,由于防火墙设置或机器上的其他东西,这看起来更像是一个问题。

您可以尝试打开端口,然后尝试从其他终端telnet 127.0.0.1 port远程登录。您还可以使用netstat -atun检查端口是否确实打开以及绑定到哪个地址(0.0.0.0表示可以通过所有IP地址访问)。