У меня есть проблема с использованием ServerSocket
в моем приложении.
Я создаю ServerSocket
в конструкторе моего приложения. Конструктор сокета вызывает метод accept()
для ожидания подключения клиента.
Проблема заключается в том, что метод accept()
замораживает все мое приложение до тех пор, пока клиент не подключится. Поэтому я хотел бы спросить, есть ли альтернатива созданию всего ServerSocket
в отдельном потоке, что конструктор метода ServerSocket
и его accept()
вызывается рядом с моим основным приложением?
Edit:
Спасибо Olivier за совет, положив .accept в runnable и создав threadpool для обработки клиентских соединений.
Вот мой код прямо сейчас:
public void start(){
final ExecutorService clientProcessingPool = Executors.newFixedThreadPool(10);
Runnable serverTask = new Runnable() {
@Override
public void run() {
try {
serverSocket = new ServerSocket(port);
while (true) {
Socket clientSocket = serverSocket.accept();
objectout = new ObjectOutputStream(clientSocket.getOutputStream());
clientProcessingPool.submit(new ClientTask(clientSocket,objectout));
}
} catch (IOException e) {
System.err.println("Accept failed.");
}
}
};
Все отлично работает! Спасибо!