Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Лабораторная работа 2

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 6.11.2024

Лабораторная работа 2. Отправка и прием сообщений с использованием протоколов UDP и TCP/IP

Разработчик Дубаков А.А.

Часть 1. Создание приложения UDP

Постановка задачи

Необходимо разработать клиент/серверное приложение, в котором сервер может распространять сообщения всем клиентам, зарегистрированным в группе 233.0.0.1, порт 1502. Пользователь сервера должен иметь возможность ввода и отправки текстовых сообщений, а пользователь-клиент просматривает полученные сообщения.

Для решения поставленной задачи необходимо выполнить следующие шаги:

  1.  Создать новый проект.
  2.  Реализовать класс сервера для ввода и отправки сообщений.
  3.  Реализовать класс клиента для получения и просмотра сообщений.
  4.  Протестировать приложение – запустить сервер и клиент, и отправить сообщение.

Подготовительный этап

Для реализации проекта необходимо установить и настроить среду разработки Ecplise (см. п. «Установка и настройка программного обеспечения»).

Создание нового проекта

  1.  Выберите пункт меню File/New/Project, в окне выбора типа проекта укажите other/Java Project и нажмите Next.
  2.  Укажите имя проекта Lab2 и нажмите Finish.

Создание класса Server

Класс Server предназначен для отсылки сообщений всем клиентам, зарегистрированным в группе 233.0.0.1. Создание класса Server включает в себя следующие основные задачи:

  1.  Создание сокета с помощью класса DatagramSocket. Сокет сервера выполняет задачу отправки сообщения.
  2.  Создание объекта InetAddress, представляющего адрес сервера. Адреса для групповой (multicast) передачи сообщений выбираются из диапазона 224.0.0.0 - 239.255.255.255. В нашем приложении будет указан адрес 233.0.0.1.
  3.  Организация ввода строки сообщения с клавиатуры и создание объекта packet класса DatagramPacket, который хранит введенные данные и использует метод send() объекта класса DatagramSocket, для отсылки пакета всем клиентам группы.

  1.  Для создания класса сервера щелкните правой кнопкой мыши на каталог src в окне Package Explorer и выберите New/Class
    1.  В появившемся окне в качестве имени пакета (Package) укажите ru.tpu.javaEELabs.lab2, а в качестве имени класса (Name) задайте Server. Нажмите Finish.

Код класса Server приведен ниже:

package ru.tpu.javaEELabs.lab2;

import java.io.*;

import java.net.*;

public class Server {

private BufferedReader in = null;

private String str = null;

private byte[] buffer;

private DatagramPacket packet;

private InetAddress address;

private DatagramSocket socket;

public Server() throws IOException {

System.out.println("Sending messages");

  

// Создается объект DatagramSocket, чтобы

// принимать запросы клиента

socket = new DatagramSocket();

 

// Вызов метода transmit(), чтобы передавать сообщение всем

// клиентам, зарегистрированным в группе

transmit();

}

public void transmit() {

try {

// создается входной поток, чтобы принимать

// данные с консоли

 in = new BufferedReader(new InputStreamReader(System.in));

 while (true) {

  System.out.println(

"Введите строку для передачи клиентам: ");

  str = in.readLine();

  buffer = str.getBytes();

  address = InetAddress.getByName("233.0.0.1");

  // Посылка пакета датаграмм на порт номер 1502

  packet = new DatagramPacket(

buffer,

buffer.length,

address,

1502);

   

  //Посылка сообщений всем клиентам в группе

  socket.send(packet);

 }

} catch (Exception e) {

 e.printStackTrace();

} finally {

 try {

  // Закрытие потока и сокета

  in.close();

  socket.close();

 } catch (Exception e) {

  e.printStackTrace();

 }

}

}

public static void main(String arg[]) throws Exception {

 // Запуск сервера

new Server();

}

}

Создание класса Client

Класс Client позволяет клиенту присоединиться к группе 233.0.0.1 для получения сообщений от сервера. Создание класса Client включает в себя следующие основные задачи:

  1.  Создание сокета для просмотра групповых сообщений с помощью класса MulticastSocket. Сокет клиента выполняет задачу приема сообщения.
  2.  Создание объекта InetAddress, представляющего адрес сервера и присоединение к группе этого сервера с помощью метода сокета joinGroup.
  3.  Организация чтения пакетов датаграмм (DatagramPacket) из сокета и отображение полученных данных на экране.

  1.  Для создания класса клиента щелкните правой кнопкой мыши на пакет  ru.tpu.javaEELabs.lab2 в каталоге src окна Package Explorer и выберите New/Class.
  2.  В появившемся окне в качестве имени класса (Name) задайте Client. Нажмите Finish.

Код класса Client приведен ниже:

package ru.tpu.javaEELabs.lab2;

import java.net.*;

public class Client {

private static InetAddress address;

private static byte[] buffer;

private static DatagramPacket packet;

private static String str;

private static MulticastSocket socket;

public static void main(String arg[]) throws Exception {

 System.out.println("Ожидание сообщения от сервера");

 try {

  // Создание объекта MulticastSocket, чтобы получать

// данные от группы, используя номер порта 1502

  socket = new MulticastSocket(1502);

  address = InetAddress.getByName("233.0.0.1");

  // Регистрация клиента в группе

  socket.joinGroup(address);

  while (true) {

   buffer = new byte[256];

   packet = new DatagramPacket(

buffer, buffer.length);

   // Получение данных от сервера

   socket.receive(packet);

   str = new String(packet.getData());

   System.out.println(

"Получено сообщение: " + str.trim());

  }

 } catch (Exception e) {

  e.printStackTrace();

 } finally {

  try {

   // Удаление клиента из группы

   socket.leaveGroup(address);

   // Закрытие сокета

   socket.close();

  } catch (Exception e) {

   e.printStackTrace();

  }

 }

}

}

Запуск и тестирование

Каждый из построенных классов Client и Server содержит метод main() и является, по сути, отдельным приложением, которое может быть запущено на отдельной машине, подключенной к сети, при этом по умолчанию область видимости передачи групповых сообщений (multicasting scope) ограничивается подсетью сервера. В нашем случае роль клиента и сервера будет выполнять один и тот же компьютер.

  1.  Щелкните правой кнопкой мыши на класс Client в окне Package Explorer и выберите команду Run As/Java Application. Проделайте то же самое с классом Server.
    1.  В результате будут запущены два приложения, переключаться между которыми можно с помощью кнопки-списка Display Selected Console представления Console:

  1.  Выберите консоль сервера, введите строку hello и нажмите Enter для подтверждения отправки.

  1.  Просмотрите консоль клиента и убедитесь, что клиент успешно приял сообщение.

  1.  Остановка приложения осуществляется с помощью кнопки Terminate представления Console.

Часть 2. Создание приложения TCP/IP

Постановка задачи

Необходимо разработать клиент/серверное приложение, в котором сервер слушает запросы клиентов на порт 1500 и отправляет объект-сообщение содержащий текущую дату/время сервера и строку сообщения. Пользователь-клиент должен иметь возможность просмотра полученного сообщения.

Для решения поставленной задачи необходимо выполнить следующие шаги:

  1.  Создать класс DateMessage с двумя полями: дата и строка – для хранения и передачи сообщения клиенту.
  2.  Реализовать класс сервера для прослушивания соединений на порту 1500 и отправки сообщений. Задача класса сервера должна выполняться в отдельном потоке.
  3.  Реализовать класс клиента для получения и просмотра сообщений
  4.  Протестировать приложение – запустить сервер и клиент, и проверить передачу и получение сообщения.

Подготовительный этап

Для реализации проекта необходимо установить и настроить среду разработки Ecplise (см. п. «Установка и настройка программного обеспечения»).

Создание класса DateMessage

  1.  Создайте новый Java-класс DateMessage в пакете ru.tpu.javaEELabs.lab2.
  2.  Скопируйте следующее содержимое класса:

package ru.tpu.javaEELabs.lab2;

import java.io.Serializable;

import java.util.Date;

public class DateMessage implements Serializable {

 

private Date date;

private String message;

 

public DateMessage(Date date, String message) {

 this.date = date;

 this.message = message;

}

public Date getDate() {

 return date;

}

public void setDate(Date date) {

 this.date = date;

}

public String getMessage() {

 return message;

}

public void setMessage(String message) {

 this.message = message;

}

 

}

Создание класса ServerTCP

Создание класса ServerTCP включает в себя следующие основные задачи:

  1.  Создание серверного сокета с помощью класса ServerSocket.
  2.  Ожидание запроса от клиента с помощью метода accept() серверного сокета.
  3.  Формирование объекта-сообщения и отправка его с помощью выходного потока клиентского сокета.

  1.  Создайте новый Java-класс ServerTCP в пакете ru.tpu.javaEELabs.lab2.

Код класса Server приведен ниже:

package ru.tpu.javaEELabs.lab2;

import java.io.ObjectOutputStream;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.Calendar;

/**

* Класс сервера (выполняется в отдельном процессе)

 */

public class ServerTCP extends Thread {

 // Объявляется ссылка

// на объект - сокет сервера

 ServerSocket serverSocket = null;

/**

 * Конструктор по умолчанию

 */

public ServerTCP() {

 try {

  // Создается объект ServerSocket, который получает

  // запросы клиента на порт 1500

  serverSocket = new ServerSocket(1500);

  System.out.println("Starting the server ");

  // Запускаем процесс

  start();

 } catch (Exception e) {

  e.printStackTrace();

 }

}

/**

 * Запуск процесса

 */

public void run() {

 try {

  while (true) {

   // Ожидание запросов соединения от клиентов

   Socket clientSocket = serverSocket.accept();    

   System.out.println("Connection accepted from " +     clientSocket.getInetAddress().getHostAddress());

   

   // Получение выходного потока,

   // связанного с объектом Socket 

   ObjectOutputStream out =

new ObjectOutputStream(

clientSocket.getOutputStream());

   

   // Создание объекта для передачи клиентам

   DateMessage dateMessage = new DateMessage(

     Calendar.getInstance().getTime(),

     "Текущая дата/время на сервере");

   // Запись объекта в выходной поток

   out.writeObject(dateMessage);

   out.close();

  }

 } catch (Exception e) {

  e.printStackTrace();

 }

}

public static void main(String args[]) {

 // Запуск сервера

 new ServerTCP();

}

}

Создание класса ClientTCP

Класс ClientTCP позволяет клиенту присоединиться к серверу, используя его IP-адрес (в нашем случае localhost) и получить от него сообщение. Создание класса ClientTCP включает в себя следующие основные задачи:

  1.  Создание сокета для доступа к серверу localhost на порт 1500.
  2.  Получение входного потока сокета.
  3.  Чтение объекта-сообщения из потока и отображение полученных данных на экране.

  1.  Создайте новый Java-класс ClientTCP в пакете ru.tpu.javaEELabs.lab2.

Код класса Client приведен ниже:

package ru.tpu.javaEELabs.lab2;

import java.io.ObjectInputStream;

import java.net.Socket;

public class ClientTCP {

public static void main(String args[]) {

 try {

  // Создается объект Socket 

  // для соединения с сервером

  Socket clientSocket = new Socket("localhost", 1500);

  

  // Получаем ссылку на поток, связанный с сокетом

  ObjectInputStream in =

    new ObjectInputStream(clientSocket.getInputStream());

  

  // Извлекаем объект из входного потока

  DateMessage dateMessage =

(DateMessage) in.readObject();

  

  // Выводим полученные данные в консоль

  System.out.println(dateMessage.getMessage());

  System.out.println(dateMessage.getDate());

 } catch (Exception e) {

  e.printStackTrace();

 }

}

}

Запуск и тестирование

Щелкните правой кнопкой мыши на класс ServerTCP в окне Package Explorer и выберите команду Run As/Java Application. В консоли отображается сообщение Starting the server.

Проделайте то же самое с классом ClientTCP. При запуске клиент пытается соединиться с сервером и обрабатывает полученное сообщение. В результате в консоли клиента выводится следующее:

Выберите консоль сервера и просмотрите сообщение о приеме соединения от клиента:

Варианты заданий

1. Необходимо разработать клиент/серверное приложение, в котором сервер каждые 10 секунд распространяет некоторое текстовое сообщение, например, о погоде, всем промежуточным клиентам, зарегистрированным в группе 233.0.0.1, порт 1502 с помощью UDP. Текст сообщения хранится в текстовом файле на сервере. Промежуточный клиент фильтрует полученные сообщения и в случае изменения содержимого отображает его в консоли. Для конечного клиента промежуточный клиент выступает сервером. Конечный клиент присоединяется к промежуточному и получает тексты последних пяти отфильтрованных сообщений (с помощью протокола TCP/IP). Необходимо снабдить приложение конечного клиента графическим интерфейсом.

2. Разработать приложение для широковещательного общения пользователей (чат). Клиент отсылает сообщение серверу (с помощью протокола TCP/IP). Сервер накапливает порции сообщений и каждые 10 секунд распространяет очередную порцию сообщений всем клиентам, зарегистрированным в группе 233.0.0.1, порт 1502 с помощью UDP. Если за указанный период не поступило ни одного нового сообщения, то рассылка не производится. Клиент принимает сообщения и отображает их на экране. Клиентское приложение должно иметь удобный графический интерфейс для ввода новых и просмотра полученных сообщений.




1. тема затронутая С
2. Детско-родительское общение
3.  legitimte system of money in generl use in prticulr country 2
4. 1998 гг.- ПРИЧИНЫ И ПОСЛЕДСТВИЯ Мирное присоединение Гонконга к КНР в июле 1997 г.html
5. Особые бредовые психозы позднего возраста (параноиды жилья)
6.  Организация обслуживання туристов
7. Лабораторна робота 2 Масиви в Mthcd
8. История развития теории и практики менеджмент
9. РЕФЕРАТ дисертації на здобуття наукового ступеня кандидата біологічних наук
10. Организация производства молока на молочно-товарной ферме на 600 голов скота
11. Они имеют разнообразный характер и могут быть объединены в две основные группы- общие гарантии местного сам
12. Реферат- Соотношение норм права и морали
13. Лекция 8 Информационная модель ~ информационнологическая модель предметной области ИЛМ ПО
14. Разновидности мультипрограммирования
15. тематику; 2 головний фактор ' невідокремленість митної діяльності від загальної податкової функції держави
16. реферат дисертації на здобуття наукового ступеня кандидата технічних наук Київ 2002
17. Мир лазури в поэмах М.Цветаевой
18. Тема 18- Денежнокредитная система
19. ТЕОРЕТИЧЕСКОЕ ИЗУЧЕНИЕ ПСИХОЛОГИЧЕСКИХ ОСОБЕННОСТЕЙ МНОГОДЕТНЫХ СЕМЕЙ [2.html
20. Удлинение и его разновидности