У меня есть проблема с использованием ServerSocket
в моем приложении.Создание ServerSocket в отдельном потоке?
Я создаю ServerSocket
в конструкторе моего приложения. Конструктор сокета вызывает метод accept()
для ожидания подключения клиента.
Проблема в том, что метод accept()
замораживает все мое приложение до тех пор, пока клиент не подключится. Поэтому я хотел бы спросить, есть ли альтернатива созданию целого ServerSocket
в отдельном потоке, что конструктор ServerSocket
и его метод accept()
вызывается рядом с моим основным приложением?
Edit:
Благодаря Оливье за совет, ставящие Признавайте в работоспособной и создавая ThreadPool для обработки clientconnections.
Thats мой код прямо сейчас:
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.");
}
}
};
Everythings работает нормально! Благодаря!
попытался перемещение сокета кода, связанный в отдельном потоке? возникла ли какая-либо конкретная проблема? – Ankit
Посмотрите на java.nio.channels.AsynchronousServerSocketChannel и посмотрите, соответствует ли оно вашим требованиям. – Crollster
Или еще лучше, взгляните на этот вопрос: http://stackoverflow.com/questions/8940747/how-should-i-use-asynchronousserversocketchannel-for-accepting-connections – Crollster