Я новичок в Java Socket Programming и в настоящее время изучаю его Socket API. Я создал новое простое приложение, которое запускает ServerSocket
и слушает клиентов, когда клиент записывает что-то в сокет, сервер выделяет новый поток для этого клиента. Сначала я попробовал использовать консольное приложение, и все работало нормально Теперь я сделал графический интерфейс для того же, используя SWT (плагин WindowBuilder в Eclipse 3.7). В окне есть кнопка, которая включает и выключает прослушивание сервера. Ниже приведен код, написанный в событии нажатия кнопки SWT, которое начнет прослушивание для клиентов.
if(!isServerRunning)
{
btnServerRunner.setText("Stop Server");
isServerRunning = true;
while (listening)
{
try
{
new ClientHandler(listener.accept()).start();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
else
{
try
{
listener.close();
}
catch(Exception ex)
{
ex.printStackTrace();
}
btnServerRunner.setText("Start Server");
isServerRunning = false;
}
Класс ClientHandler
имеет расширение Thread
и, следовательно, будет запускать новый поток для каждого нового клиента. Я знаю, что приведенный выше код работает для консольного приложения, но не будет работать для графического интерфейса, поскольку я запускаю приложение в бесконечный цикл прослушивания клиентских сокетов при нажатии кнопки. Каков элегантный способ запуска и остановки ServerSocket
для прослушивания клиентов, которые не замораживают пользовательский интерфейс приложения?
Спасибо.