Проблемы сетевого ввода/вывода
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

n Модель клиент-сервер не соответствует системе ввода-вывода UNIX

l Нет пассивных операций ввода-вывода

l Не умеют устанавливать соединения

l Используется фиксированный адрес файла

l Соединение с файлом доступно на протяжении всего цикла запись-считывание

n Для не ориентированных на соединение протоколов фиксированный адрес – проблема: при передаче дейтаграммы адрес есть, а соединения нет

 

Абстракция сокета

n Сетевое соединение – это процесс передачи данных по сети между двумя компьютерами или процессами

n Сокет – конечный пункт передачи данных

n Для программ сокет – одно из окончаний сетевого соединения

n Для установления соединения каждая из сетевых программ должна иметь свой собственный сокет

 

Абстракция сокета

n Связь между двумя сокетами может быть ориентированной на соединение

n Связь между двумя сокетами может быть не ориентированной на соединение

n Сокет связан с номером порта

 

Абстракция сокета

 

 

Вопрос 104 Структура пакета java.net. Адресация. Соединение через сокеты. 15-18. Лекция Основы создания сетевых приложений на Java.

 

А что же на Java ?

n Сокеты инкапсулированы в экземпляры специальных классов

n Все низкоуровневое взаимодействие скрыто от пользователя

n Существует семейство классов, обеспечивающих настройку сокетов и работу с ними

 

Пакет java.net

n Адресация

n Установление TCP-соединения

n Передача/прием дейтаграмм через UDP

n Обнаружение/идентификация сетевых ресурсов

n Безопасность: авторизация / права доступа

 

Адресация

n IP-адресация

n Адрес сокета

 

Общая схема соединения

 

Вопрос 105 Классы Socet и ServerSocet, работа с ним. 19-25. Лекция Основы создания сетевых приложений на Java.

 

Класс Socket

n Реализует клиентский сокет и его функции

n Конструкторы

l Socket()

l Socket(InetAddress address, int port)

l Socket(InetAddress address, int port, InetAddress localAddr, int localPort)

l Socket(String host, int port)

l Socket(String host, int port, InetAddress localAddr, int localPort)

n Методы

l void close()

l InetAddress getLocalAddress()

l InputStream getInputStream()

l OutputStream getOutputStream()

l static void setSocketImplFactory(SocketImplFactory fac)

l И прочие…

 

Порядок работы с клиентским сокетом

n Открытие сокета

n Открытие потока ввода и/или потока вывода для сокета

n Чтение и запись в потоки согласно установленному протоколу общения с сервером

n Закрытие потоков ввода-вывода

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

 

Пример клиента

import java.io.*;

import java.net.*;

public class EchoClient {

public static void main(String[] args) throws IOException {

Socket echoSocket = null;

PrintWriter out = null;

BufferedReader in = null;

try {

echoSocket = new Socket("taranis", 7);

out = new PrintWriter(echoSocket.getOutputStream(), true);

in = new BufferedReader(new InputStreamReader(

                             echoSocket.getInputStream()));  

} catch (UnknownHostException e) {

System.err.println("Don't know about host: taranis.");

System.exit(1);

} catch (IOException e) {

System.err.println("Couldn't get I/O for the connection to:" +

                     "taranis.");

System.exit(1);

}

BufferedReader stdIn = new BufferedReader(

                          new InputStreamReader(System.in));

String userInput;

while ((userInput = stdIn.readLine()) != null) {

out.println(userInput);

System.out.println("echo: " + in.readLine());

}

out.close();

in.close();

stdIn.close();

echoSocket.close();

}

}

 

Класс ServerSocket

n Реализует серверный сокет и его функции

n Конструкторы

l ServerSocket()

l ServerSocket(int port)

l ServerSocket(int port, int backlog)

n Методы

l void close()

l Socket accept()

l void bind(SocketAddress endpoint)

l И прочие…

 

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

try {

    serverSocket = new ServerSocket(4444);

} catch (IOException e) {

    System.out.println(

              "Could not listen on port: 4444");

    System.exit(-1);

}

 

Socket clientSocket = null;

try {

    clientSocket = serverSocket.accept();

} catch (IOException e) {

    System.out.println("Accept failed: 4444");

    System.exit(-1);

}

 

Дата: 2019-07-30, просмотров: 205.