Как Вы находите свободный порт сервера TCP с помощью Ruby?

Какова ситуация, когда hashCode двух объектов равен друг другу, но == и equals () получат значение false?

blockquote>

Согласно документации Java:

[ 1112]
  • Если объекты равны (т. Е. x.equals(y) == true), то hashCode этих объектов также должны быть равны (т. Е. x.hashCode() == y.hashCode())
  • Если два объекта равны hashCode (т. Е. [ 114]), то не обязательно, чтобы эти объекты были равны (т. Е. x.equals(y) == true/false)
  • 10
    задан Marius Marais 14 October 2008 в 09:56
    поделиться

    4 ответа

    Я предполагаю, что Вы могли попробовать все порты> 5000 (например), в последовательности. Но как Вы передадите к клиентской программе, какой порт Вы слушаете? Кажется более простым выбрать порт и затем сделать это легко настраивающимся, если необходимо переместить сценарий между различными средами.

    Для HTTP стандартный порт равняется 80. Альтернативные порты, которые я видел используемый, 8080, 880 и 8000.

    -8
    ответ дан 3 December 2019 в 13:20
    поделиться

    На самом деле довольно легко, когда Вы не пытаетесь сделать все в одной строке :-/

    require 'socket'
    t = STDIN.read
    
    port = 8080 # preferred port
    begin
      server = TCPServer.new('127.0.0.1', port)    
    rescue Errno::EADDRINUSE
      port = rand(65000 - 1024) + 1024
      retry
    end
    
    # Start remote process with the value of port
    
    socket = server.accept
    puts socket.gets
    socket.print "HTTP/1.1 200/OK\rContent-type: text/plain\r\n\r\n" + t
    socket.close
    

    Это выполняет (сильное слово) то же как отрывок в вопросе.

    3
    ответ дан 3 December 2019 в 13:20
    поделиться

    Передайте 0 в для номера порта. Это заставит систему выбирать порт для Вас из эфемерного диапазона портов. После того как Вы создаете сервер, можно попросить у этого его addr, который будет содержать порт, с которым связывается сервер.

    server = TCPServer.new('127.0.0.1', 0)
    port = server.addr[1]
    
    65
    ответ дан 3 December 2019 в 13:20
    поделиться

    Не связывайтесь на случайных портах. Выберите по умолчанию и сделайте его настраивающимся. Случайные порты являются несовместимыми с брандмауэрами. FTP делает это и брандмауэр поддерживают для него, кошмар - он должен глубоко осмотреть пакеты.

    -7
    ответ дан 3 December 2019 в 13:20
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: