Прохожу курс "Построение распределенных систем на Java" в третьей лекции где описывается TCPServer вылетает эта ошибка
"Connection cannot be resolved to a type" Java version 1.7.0_05 |
Использование API java.net
Класс 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
После запуска сервер переходит в режим ожидания сообщений от клиента.
Клиент запускается следующим образом:
java TCPClient TCPHello! 127.0.0.1
где первый параметр определяет строку, которая будет передана серверу, второй - адрес узла на котором запущен сервер. В данном случае и клиент, и сервер запущены на одной машине, поэтому в качестве адреса используется адрес 127.0.0.1 ( localhost ).
После запуска клиент отправляет строку на сервер, печатает ее в консоли и завершает работу (рис. 3.4). Сервер продолжает ожидание очередного подключения следующего клиента (рис. 3.3).
Теперь, освоив необходимые технологии, мы можем приступить к первой реализации системы, решающей поставленную нами ранее задачу.