2014-12-19 3 views
-2

В настоящее время я работаю над проектом, где мне нужно создать многопоточный сервер. Я только начал работать с потоками, поэтому, пожалуйста, поймите меня.Multi Thread Java Server

До сих пор у меня есть класс, который реализует объект Runnable, ниже вы можете увидеть код, который у меня есть для метода запуска, предоставленного объектом Runnable.

public void run() { 

    while(true) { 
     try { 
      clientSocket = serversocket.accept(); 

      for (int i = 0; i < 100; i++) { 
       DataOutputStream respond = new DataOutputStream(clientSocket.getOutputStream()); 
       respond.writeUTF("Hello World! " + i); 
       try { 
        Thread.sleep(1000); 
       } catch(InterruptedException e) { 
        // 
       } 
      } 
     } catch(IOException e) { 
      System.out.println(e.getMessage()); 
     } 
    } 
} 

Bellow - это основной метод, который создает новый объект класса сервера и создает угрозу. инициализация потока.

public static void main(String args[]) { 
    new Thread(new Server(1234, "", false)).start(); 
} 

Я знаю, что это создает новый поток, но он не обслуживает сразу несколько клиентов. Первому клиенту необходимо закрыть соединение для второго, которое будет обслуживаться. Как я могу создать многопроцессорный сервер, который будет обслуживать разные клиентские сокеты одновременно? Создать нить на clientSocket = serverSocket.accept();

+1

Вы должны создать вспомогательный класс, который реализует Runnable и который обрабатывает взаимодействие потока данных для одного пользователя. затем в своем основном классе создайте эти вспомогательные классы с каждым сокетом и запустите их в своем потоке. Лучше всего, если вы используете ThreadPool для этого. Обратите внимание, что для этого есть учебники, в том числе и Oracle, и я очень удивлен, что вы еще не нашли их. Очень удивлен. –

+1

поиск учебника для ServerSockets. Готов поспорить, что каждый хороший учебник по этому вопросу опишет вашу проблему с решением – mschenk74

+1

Возможно, вам придется работать на ваших условиях поиска. Попробуйте выполнить поиск в Google: [java socket communication tutorial multithreaded] (https://www.google.com/?gws_rd=ssl#q=java+socket+communications+tutorial+multithreaded). Или просто нажмите на мою ссылку. Первый удар. –

ответ

2

Да.

из документации:

Поддержка нескольких клиентов

Чтобы сохранить пример KnockKnockServer просто, мы разработали его, чтобы прослушать и обработать один запрос соединения. Тем не менее, несколько клиентских запросов могут поступать в один и тот же порт и, следовательно, в один и тот же сервер. Запросы на соединение с клиентами помещаются в очередь на порт, поэтому сервер должен принимать соединения последовательно. Тем не менее, сервер может обслуживать их одновременно, используя поток - один поток для каждого клиентского соединения.

Основной поток логики в таком сервере заключается в следующем:

while (true) { 
    accept a connection; 
    create a thread to deal with the client; 
} 

нити чтения и записи в связь клиента по мере необходимости.

https://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html

+0

Спасибо за ссылку –