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, просмотров: 236.