Итак, у меня есть балансировщик нагрузки, и когда сервер заполнен клиентами, я хочу программно создать новый многопоточный сервер, передав порт сервера в качестве аргумента.
Вот как я пытаюсь запустить новый экземпляр сервера
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();
}
}
}
}
Мой вопрос в том, как запустить этот сервер с аргументом порта донора? этот код правильный?
Вы передаете 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.
Вам нужно передать порт конструктору, т.е. server = new SMPTServer(4001);
Отлично спасибо. Но как запустить этот экземпляр?
Он запускается в конструкторе
Это кажется хорошим, но когда я пытаюсь запустить экземпляр сервера в строке 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