Реферат Курсовая Конспект
Часть 1. Создание приложения UDP - раздел Образование, Лабораторная Работа 2. Отправка И Прием Сообщений С Исп...
|
Лабораторная работа 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
2) В появившемся окне в качестве имени пакета (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.
2) В результате будут запущены два приложения, переключаться между которыми можно с помощью кнопки-списка Display Selected Console представления Console:
3) Выберите консоль сервера, введите строку hello и нажмите Enter для подтверждения отправки.
4) Просмотрите консоль клиента и убедитесь, что клиент успешно приял сообщение.
5) Остановка приложения осуществляется с помощью кнопки 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. Если за указанный период не поступило ни одного нового сообщения, то рассылка не производится. Клиент принимает сообщения и отображает их на экране. Клиентское приложение должно иметь удобный графический интерфейс для ввода новых и просмотра полученных сообщений.
– Конец работы –
Используемые теги: часть, Создание, ложения, UDP0.073
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Часть 1. Создание приложения UDP
Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов