Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Многопоточность на сервере, чтоб много клиентов подключить 
:(
    Опции темы
Samotnik
Дата 3.11.2007, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: нет
Всего: 191



Добрый день!
Значит есть серверное приложение и в нем метод, который обрабатывает коннект клиента
Код

 public void connectClient ( )  {

    if ( ! ( portDisplay.getText () ).equals ( "" ) ) port = Integer.parseInt ( portDisplay.getText () );
    else port = DEFAULT_PORT;

    try  {

      listenSocket = new ServerSocket ( port );
      logDisplay.setText ( "Server running on "+host+", port "+port+"\n" );

      connection = listenSocket.accept ();

      outStream = connection.getOutputStream ();
      outDataStream = new DataOutputStream ( outStream );
      inStream = connection.getInputStream ();
      inDataStream = new DataInputStream ( inStream );

      logDisplay.appendText ( "Connection request received\n" );
      logDisplay.appendText ( "Message, below, received\n" );

      try {
        message = inDataStream.readUTF ();
        msgDisplay.setForeground ( Color.red );
        msgDisplay.appendText ( message );
        }  // end try for input
      catch ( EOFException except ) {
        logDisplay.appendText ( "message EOF received\n" );
        }  // end catch
      catch ( IOException except ) {
        System.out.println ( "IO Exception raised" );
        except.printStackTrace ();
        }  // end catch

      System.out.println ("Getting ready to return message");
      message = msgDisplay.getText ();
      logDisplay.appendText ( "Message, below, returned to client \n" );
      outDataStream.writeUTF ( message );
      logDisplay.appendText ( "Connection closed\n" );
      connection.close ();
      return;

    }  // end try

    catch ( IOException except)  {
      except.printStackTrace ();
    }  // end catch

  } 

Как в этот кусок кода вставить многопоточность? Чтоб на каждого нового клиента, выделялся новый сокет от сервера. А то этот код работает только с одним клиентом (((  smile 

Это сообщение отредактировал(а) Samotnik - 3.11.2007, 21:14
PM MAIL   Вверх
Samotnik
Дата 3.11.2007, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: нет
Всего: 191



Может  у кого-нить  есть примеры  работы многопоточной модели  "клиент-сервер"  ???
Скиньте посмотреть пожалуйсто, ОЧЕНЬ нужно  smile  smile  smile 
 smile  

Это сообщение отредактировал(а) Samotnik - 3.11.2007, 21:50
PM MAIL   Вверх
_Michael
Дата 5.11.2007, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 23.6.2007
Где: з полонини

Репутация: 1
Всего: 6



ServerSocket s = new ServerSocket(int port);
Socket newClientSocket = s.accept();
Ставишь в отдельном потоке, и если ассепт то новый поток для новоподключенного клиента smile Уже вроде обсуждалось где-то.


--------------------
...не убивайся ни о чем - все временно,
хоть ночь темна но светлым днем беременна...

Саади
PM MAIL   Вверх
valiantsin
Дата 5.11.2007, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 25.10.2007

Репутация: 1
Всего: 1



Уважаемый Samotnik, возможно Вам подойдет пример этого кода:
Код

public class NetworkGenerator implements  Runnable {
    private Socket socket;
    private InputStream inputStream;
    private Thread th;
    private boolean active = true;
    private ServerForGenerator newServerForGenerator;


    public NetworkGenerator(int port, Dimension size) {
        newServerForGenerator = new ServerForGenerator(port, size);// Создает сервер для генератора

        try {// Открывает сокетное соединение
            socket = new Socket("localhost", port);
            inputStream = socket.getInputStream();
        } catch (Exception e) {
            System.out.println("" + e);
        }

        th = new Thread(this);// Создаем поток
        th.setDaemon(true);
        th.start();// Стартуем поток
    }

    public void run() {
        while (active) {
            try {
                int x = inputStream.read(), // Поочереди принимает два некоторых сгенерированных значения                y = inputStream.read();


            } catch (IOException e) {
                System.out.println("" + e);
            }
        }
    }

    public void stop() {
        active = false;
        newServerForGenerator.stop();
        newServerForGenerator = null;

    }

}


class ServerForGenerator implements Runnable {
    ServerSocket serverSocket;
    Socket socket;
    Thread threadForListen;
    OutputStream outputStream;
    Dimension size;
    Timer timer;


    public ServerForGenerator(int port, Dimension size) {

        this.size = size;

        try {
            serverSocket = new ServerSocket(port);// создаем серверный сокет
        } catch (IOException e) {
            System.out.println("" + e);
        }
        threadForListen = new Thread(this);// запускаем поток, КОТОрый слушает соединения
        threadForListen.setDaemon(true);
        threadForListen.start();
    }

    public void run() {
        try {
            socket = serverSocket.accept();// если есть запрос на соединение, ТО соединяемся
            outputStream = socket.getOutputStream();
        } catch (IOException e) {
            System.out.println("" + e);
        }
        // что-то тут сделать например:
        timer = new Timer("some timer");
                                if (outputStream != null) {
            try {// на событие таймера пересылаем два некоторых числа клиенту. Посылаем по порядку
                outputStream.write((int) (Math.random() * 100000 % size.width));
                outputStream.write((int) (Math.random() * 100000 % size.width));
            } catch (IOException ex) {
                System.out.println("" + ex);
            }
            } else {

        }
    }

    public void stop() {
        try {
            socket.close();// если стоп, то закрываем сокет.
            serverSocket.close();
            outputStream.close();

            serverSocket = null;
            socket = null;
            outputStream = null;
            timer = null;

        } catch (Exception e) {
            System.out.println("" + e);
        }
    }
}
 
Хотя я возможно просто не понял вопрос...

Это сообщение отредактировал(а) valiantsin - 5.11.2007, 14:30
PM MAIL ICQ   Вверх
Platon
Дата 5.11.2007, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 3
Всего: 40



Samotnik,  smile  интересно, а для кого я свою статью написал?
Попробуй своё приложение оформить на базе Apache MINA.
PM MAIL ICQ   Вверх
Samotnik
Дата 6.11.2007, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: нет
Всего: 191



Цитата(Platon @  5.11.2007,  20:33 Найти цитируемый пост)
интересно, а для кого я свою статью написал?

Какую, где ее найти можно??
PM MAIL   Вверх
Platon
Дата 6.11.2007, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 3
Всего: 40



Ак ты ж ее видел уже...
Apache MINA
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0769 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.