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();
                }
        }
    }
}

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

Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
Что такое управление транзакциями JDBC и как оно используется для поддержания согласованности данных?
Что такое управление транзакциями JDBC и как оно используется для поддержания согласованности данных?
Управление транзакциями JDBC - это мощная функция, которая позволяет рассматривать группу операций с базой данных как единую единицу работы. Оно...
Выполнение HTTP-запроса с помощью Spring WebClient: GET
Выполнение HTTP-запроса с помощью Spring WebClient: GET
WebClient - это реактивный веб-клиент, представленный в Spring 5. Это реактивное, неблокирующее решение, работающее по протоколу HTTP/1.1.
Gradle за прокси-сервером
Gradle за прокси-сервером
Создайте проект Gradle под сетевым прокси.
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

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