Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lekcii_RSOI.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
400 Кб
Скачать
☆

3.8.4Реализация технологии клиент-сервер на Java (работа с сетями)

Вызывается telnet с соотв. параметрами.

import java.io.*;

import java.net.*;

public class SocketTest {

public static void main (String[] args) {

try {

socket = new socket(addr, port);

// смотри методичку;

Лекция 30.11.04

// сервер

import java.rm.*;

import java.rmi.server.*;

public class ProdbctServer{

public static void main(string []args)

{

try{

ProductImpl P1 = new ProductImpl(“Toaster”);

ProductImpl P2 = new ProductImpl(“Microwave”);

// Вот создали 2 удаленных объекта. Теперь их надо зарегистрировать, иначе они будут не видны.

Naming.rebind(“toaster”, P1);

Naming.rebind(“microwave”, P2);

}

catch {...}

}

}

На прошлой лекции определили класс ProductImpl. Также определили интерфейс: Product, который расширяет интерфейс Remote, расширив методом, возвращающим адрес продукта.

При регистрации могли пользовться:

start rmiregistry

start java ProductServer.

Вот так на Java оформляется сревер удаленных объектов.

Если захотим посмотреть зарегистрированные объекты, то Naming.list().

3.8.5Клиентская часть

В ней нужно установить менеджер обеспечения безопасности, так как обращаемся к удаленным объектам и не известно, что они нам преподнесут. Для этого есть RMISecurityManager. Его нужно устанавливать.

  1. Вот пример для использования удаленных объектов: import java.rmi.*; import java.server.*; public class ProductClient{ public static void main(string[] args){ // Устанавливается служба безопасности System.setSecurityManager(new RMISecurityManager); // Формируем URL String URL = “rmi://localhost/”; //Далее суть rmi try{ Product c1 = (Product)Naming.lookup(url+”toaster”); // Это ссылка на заместителя на клиентской части в адресном пространстве клиента. //Вот на сколько спрятано от программиста в механизме rmi: создание заглушек, заместителей по описанию интерфейса, обращение к службе Naming. Product c2 = (Product)Naming.lookup(url+”microwave”); System.out.println(c1.getDescription()); // А здесь нужно проиллюстрировать как идет обращение к методу удаленного объекта и этой строчки для этого не достаточно. Аналогично: (Можно объяснять и диаграммой и словами) System.out.println(c2.getDescription()); } cathc{..} } }

        1. Объяснение в виде диаграммы последовательности

Последовательность вызовов.

Рис. 3.17.

На стороне сервера есть класс ProductImpl – класс – удаленный объект.

  1. Клиент обращается к службе именования за информацией об уделенном объекте по имени – связывание. Результат – создание заглушки.

  2. Клиент обращается к заглушке в процессе обращения к методу.

  3. Заглушка формирует запрос: упаковывает параметры, осуществляет маршашинг и обращается к серверной части.

  4. Получатель осуществляет демарш-г и действительно обращается локально к методу Description и возвращает результат обращения. Если обращение не удачно, то исключение – передается на клиентскую сторону.

  5. Получатель осуществляет маршалиг этого результата. Свернутое, значит подвергнутое маршалингу. Результат – строка или исключение.

Вот что стоит за 2 командами клиентской части. Каждый раз выполняется на 1 команду.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]