Как Вы указываете диапазон портов для сокетов Java?

Только код JavaScript без зависимостей:

var p = {"p1": "value1", "p2": "value2", "p3": "value3"};
keys = Object.keys(p);   // ["p1", "p2", "p3"]

for(i = 0; i < keys.length; i++){
  console.log(keys[i] + "=" + p[keys[i]]);   // p1=value1, p2=value2, p3=value3
}
10
задан RamenChef 20 November 2016 в 23:43
поделиться

4 ответа

Hrm, после чтения документов, я не думаю, что Вы можете. Можно или связать с любым портом, затем снова переплести, если это не приемлемо, или неоднократно связывайте с портом в диапазоне, пока Вы не успешно выполняетесь. Второй метод будет самым "эффективным".

Я беспокоюсь об этом ответе, потому что это... неэлегантно, все же я действительно не могу найти ничто больше ни одним:/

7
ответ дан 4 December 2019 в 01:03
поделиться

Привязка сокета любому франко-порт является (обычно) функцией поддержки сокета операционной системы; это не характерно для Java. Солярис, например, поддержки, корректирующие эфемерный диапазон портов посредством команды ndd. Но только корень может скорректировать диапазон, и он влияет на всю систему, не только Вашу программу.

Если регулярное эфемерное обязательное поведение не удовлетворяет Вашим потребностям, необходимо будет, вероятно, записать собственному использованию Socket.bind ().

2
ответ дан 4 December 2019 в 01:03
поделиться

Вот код, в котором Вы нуждаетесь:

public static Socket getListeningSocket() {
    for ( int port = MIN_PORT ; port <= MAX_PORT ; port++ )
    {
        try {
            ServerSocket s = new ServerSocket( port );
            return s;      // no exception means port was available
        } catch (IOException e) {
            // try the next port
        }
    }
    return null;   // port not found, perhaps throw exception?
}
2
ответ дан 4 December 2019 в 01:03
поделиться

Вы могли бы поглядеть на код Java, который реализует функцию, которую Вы используете. Большинство библиотек Java записано в Java, таким образом, Вы могли бы просто видеть то, в чем Вы нуждаетесь там.

Принятие @Kenster было правильным, и это - работа системы, Вам, вероятно, придется просто выполнить итерации по портам, пытающимся связать с каждым или протестировать его. Хотя это немного болезненно, это не должны быть больше, чем несколько строк кода.

0
ответ дан 4 December 2019 в 01:03
поделиться
Другие вопросы по тегам:

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