Java: запустите класс сервера сокетов с портом в качестве аргумента

Итак, у меня есть балансировщик нагрузки, и когда сервер заполнен клиентами, я хочу программно создать новый многопоточный сервер, передав порт сервера в качестве аргумента.

Вот как я пытаюсь запустить новый экземпляр сервера

int newport = 4001
SMTPserver server = new SMTPserver();
server.SMTPserver(port);

это мой сервер

public class SMTPserver {
    public static Socket connsock = null;
    public static int port;

//     SMTPserver(int port) {
//        this.port = port;
//    }

    public static void main(String args[]) throws IOException {

        ServerSocket serverSocket = new ServerSocket(port);
        System.out.println("Server is running on port " + port);

        while (true) {

            try {

                // accepting client socket
                connsock = serverSocket.accept();
                }
        }
    }
}

мой вопрос в том, как запустить этот сервер с аргументом порта донора? этот код правильный?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
155
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы передаете 0 конструктору ServerSocket, поэтому он выберет доступный порт. Вам нужно передать ненулевой номер порта, если вы хотите использовать определенный порт.

Вы можете сделать это следующим образом:

public class SMTPserver {
    public Socket connsock = null;
    public int port;

    public SMTPserver(int port) {
        this.port = port;

        ServerSocket serverSocket = new ServerSocket(port);
        System.out.println("Server is running on port " + port);

        while (true) {

            try {

                // accepting client socket
                connsock = serverSocket.accept();
                }
        }
    }
}

Обратите внимание, что я присваиваю параметр порта полю порта, а затем передаю его конструктору ServerSocket.

это кажется хорошим, но когда я пытаюсь запустить экземпляр сервера в строке SMTPserver server = new SMTPserver(); я понимаю constructor SMTPserver in class SMTPserver cannot be applied to given types; required: int found: no arguments reason: actual and formal argument lists differ in length

pafibo 21.12.2020 10:42

Вам нужно передать порт конструктору, т.е. server = new SMPTServer(4001);

tgdavies 21.12.2020 10:44

отлично спасибо. Но как запустить этот экземпляр?

pafibo 21.12.2020 11:18

Он запускается в конструкторе

tgdavies 21.12.2020 11:50

Другие вопросы по теме