Лекция
Привет, Вы узнаете о том , что такое клиент-сервер на java, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое клиент-сервер на java , настоятельно рекомендую прочитать все из категории ООП и практические JAVA.
Основы создания сетевых приложений на Java
План лекции
Модель OSI
.
Transmission Control Protocol TCP – основанный на соединениях протокол, обеспечивающий надежную передачу данных между двумя компьютерами с сохранением порядка данных
Используется в: HTTP, FTP, Telnet и др.
User Datagram Protocol UDP – не основанный на соединениях протокол, реализующий пересылку независимых пакетов данных, называемых дейтаграммами, от одного компьютера к другому без гарантии их доставки
Порядок работы
Понятие порта Компьютер (обычно) имеет только одно физическое соединение с сетью Соединение описывается, например, IP- адресом (32 или 128 бит на нынешний момент) Как различать информацию для различных приложений? А.В.
Сокет привязывается к порту
Порт описывается 16-битным числом
Порты 0-1023 зарезервированы
TCP orUDP portapp port # data Packet Data
В 80-ых годах американское правительственное агентство по поддержке исследовательских проектов (ARPA), финансировало реализацию протоколов TCP/IP для UNIX в Калифорнийском университете в г.
Беркли Разработан интерфейс прикладного программирования для сетевых приложений TCP/IP (TCP/IP API)
TCP/IP sockets или Berkeley sockets
Связь с файловой системой TCP/IP в рамках UNIX Интерфейс сокетов – через системные вызовы UNIX Системные вызовы ввода-вывода UNIX выглядят как последовательный цикл:
Нет различий между файлами и внешними устройствами
Модель клиент-сервер не соответствует системе ввода-вывода UNIX
Сетевое соединение – это процесс передачи данных по сети между двумя компьютерами или процессами
Сокет – конечный пункт передачи данных
Для программ сокет – одно из окончаний сетевого соединения
Для установления соединения каждая из сетевых программ должна иметь свой собственный сокет
Связь между двумя сокетами может быть ориентированной на соединение
Связь между двумя сокетами может быть не ориентированной на соединение
Сокет связан с номером порта
Абстракция сокета serverport client connection request serverport p o r t clientport connection
Сокеты инкапсулированы в экземпляры специальных классов
Все низкоуровневое взаимодействие скрыто от пользователя
Существует семейство классов, обеспечивающих настройку сокетов и работу с ними
Адресация
Установление TCP-соединения
Передача/прием дейтаграмм через UDP Обнаружение/идентификация сетевых ресурсов
Безопасность: авторизация / права доступа
IP-адресация
Адрес сокета InetAddress Inet4Address Inet6Address SocketAddress InetSocketAddress
Класс Socket Реализует клиентский сокет и его функции
Конструкторы
Методы
Порядок работы с клиентским сокетом
Пример клиента 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
Реализует серверный сокет и его функции
Конструкторы
Методы
Создание серверного сокета
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);}
Сервер параллельной обработки запросов
Стадия 1 Установление соединения клиент-сервер
Стадия 2 Сервер параллельной обработки передает управление дочернему процессу
Стадия 3 Если во время обработки запроса поступает запрос от другого клиента, сервер параллельной обработки передает управление новому дочернему процессу
Клиент 1 Сервер Клиент 1 Дочерний процесс 1 Сервер Клиент 1 Дочерний процесс 1 Сервер Клиент 2 Дочерний процесс 2
Дейтаграмма – независимое, самодостаточное сообщение, посылаемое по сети, чья доставка, время (порядок) доставки и содержимое не гарантируются Могут использоваться как для адресной, так и для широковещательной рассылки
Класс DatagramPacket Экземпляры класса являются прототипами дейтаграмм- сообщений
Конструкторы
Методы
Класс DatagramSocket
Экземпляры являются не ориентированными на соединение сокетами
Конструкторы
Методы
Передача дейтаграмм
URL – адрес ресурса в Интернет Имя протокола Протокол, используемый для связи Имя хоста Имя компьютера, на котором расположен ресурс Имя файла Путь к файлу на компьютере Номер порта Номер порта для соединения (необязателен) Ссылка Ссылка на именованный якорь (необязательна) Может быть абсолютным и относительным URL gamelan = new URL("http", "www.gamelan.com", 80, "pages/Gamelan.network.html");
Прямое чтение из URL import java.net.*;
import java.io.*;
public class URLReader { public static void main(String[] args) throws Exception { URL yahoo = new URL("http://www.yahoo.com/");
BufferedReader in = new BufferedReader( new InputStreamReader( yahoo.openStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) { System.out.println(inputLine);
} in.close();
}}
Чтение из URL-соединения import java.net.*;
import java.io.*;
public class URLConnectionReader { public static void main(String[] args) throws Exception { URL yahoo = new URL("http://www.yahoo.com/");
URLConnection yc = yahoo.openConnection();
BufferedReader in = new BufferedReader( new InputStreamReader( yc.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) { System.out.println(inputLine);
} in.close();
}}
Запись в URL-соединение import java.io.*;
import java.net.*;
public class Reverse { public static void main(String[] args) throws Exception { if (args.length != 1) { System.err.println("Usage: java Reverse" + "string_to_reverse");
System.exit(1);
} String stringToReverse = URLEncoder.encode(args , "US-ASCII");
URL url = new URL( "http://java.sun.com/cgi-bin/backwards");
Запись в URL-соединение URLConnection connection = url.openConnection();
connection.setDoOutput(true);
PrintWriter out = new PrintWriter( connection.getOutputStream());
out.println("string=" + stringToReverse);
out.close();
BufferedReader in = new BufferedReader( new InputStreamReader( connection.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) System.out.println(inputLine);
in.close();
}}
Исследование, описанное в статье про клиент-сервер на java, подчеркивает ее значимость в современном мире. Надеюсь, что теперь ты понял что такое клиент-сервер на java и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории ООП и практические JAVA
Комментарии
Оставить комментарий
ООП и практические JAVA
Термины: ООП и практические JAVA