Опубликован: 10.10.2010 | Доступ: свободный | Студентов: 3214 / 301 | Оценка: 4.14 / 3.32 | Длительность: 13:16:00
ISBN: 978-5-9963-0444-8
Специальности: Системный архитектор
Лекция 3:

Использование API java.net

< Лекция 2 || Лекция 3: 123 || Лекция 4 >

Класс Connection

1  class Connection extends Thread {
2  DataInputStream in;
3  DataOutputStream out;
4  Socket clientSocket;
5  public Connection (Socket aClientSocket) {
6     try {
7       clientSocket = aClientSocket;
8       in = new DataInputStream( clientSocket.getInputStream());
9       out = new DataOutputStream( clientSocket.getOutputStream());
10     this.start();
11    } catch(IOException e){System.out.println ("Connection:"+e.getMessage());
12   }
13  }
14    public void run() { // an echo server
15      try {
16        String data = in.readUTF(); // read a line of data from the stream
17        out.writeUTF(data); // write a line to the stream
18        clientSocket.close();
19  } catch (EOFException e){System.out.println ("EOF:"+e.getMessage());
20  } catch (IOException e) {System.out.println ("readline:"+e.getMessage());}
21  }
22  }
Листинг 3.5. Класс Connection

Класс Connection (пример 3.5) служит для обслуживания отдельного клиента. Мы расположили его в том же исходном файле, что и класс TCPServer,поэтому он не импортирует библиотеки java.net и java.io. Этот класс является потомком класса Thread,т.е. является классом-потоком. В конструктор класса передается сокет, который вернул метод accept серверного сокета, - с его помощью этот класс будет взаимодействовать с клиентом. В конструкторе создаются соответствующие потоки ввода-вывода и запускается поток (поскольку класс сам является потоком, он запускает себя). Все дальнейшие действия по обслуживанию клиента будут производиться в методе run (строки 14-22). Метод run,как правило, представляет собой вечный цикл, выход из которого осуществляется либо по ошибке сетевого ввода-вывода, либо по специальной команде, передаваемой клиентом и извещающей сервер об окончании работы. В данном случае класс выполняет только два действия - чтение одной строки с клиента и обратную передачу этой же строки. После выполнения этих действий сокет закрывается, поскольку никаких данных передавать по нему более не предполагается и метод run завершается, что означает завершение потока обслуживания клиента.

Компиляция

Для компиляции примера нужно выполнить следующие действия:

  • перейти в каталог, где сохранены файлы с исходным кодом;
  • набрать в командной строке команду компиляции javac *.java.

После компиляции в текущем каталоге должны появиться файлы с расширением . class, компиляция должна завершиться без ошибок.

Запуск приложения

Первым запускается сервер, для его запуска необходимо выполнить команду:

java TCPServer

После запуска сервер переходит в режим ожидания сообщений от клиента.

Вывод сервера

Рис. 3.3. Вывод сервера

Клиент запускается следующим образом:

java TCPClient   TCPHello! 127.0.0.1

где первый параметр определяет строку, которая будет передана серверу, второй - адрес узла на котором запущен сервер. В данном случае и клиент, и сервер запущены на одной машине, поэтому в качестве адреса используется адрес 127.0.0.1 ( localhost ).

После запуска клиент отправляет строку на сервер, печатает ее в консоли и завершает работу (рис. 3.4). Сервер продолжает ожидание очередного подключения следующего клиента (рис. 3.3).

Вывод клиента

Рис. 3.4. Вывод клиента

Теперь, освоив необходимые технологии, мы можем приступить к первой реализации системы, решающей поставленную нами ранее задачу.

< Лекция 2 || Лекция 3: 123 || Лекция 4 >
Алмаз Мурзабеков
Алмаз Мурзабеков
Прохожу курс "Построение распределенных систем на Java" в третьей лекции где описывается TCPServer вылетает эта ошибка
"Connection cannot be resolved to a type"


Java version 1.7.0_05