Скачать презентацию Клиент серверное приложение 1 IP адрес Скачать презентацию Клиент серверное приложение 1 IP адрес

10. JavaLecture_Sockets.ppt

  • Количество слайдов: 20

Клиент серверное приложение 1 Клиент серверное приложение 1

IP адрес • IP-адрес это четыре числа от 0 до 255 разделенных точками (например IP адрес • IP-адрес это четыре числа от 0 до 255 разделенных точками (например 145. 76. 190. 32). мы это число записываем в десятичной системе, компьютер же "видит" его в двоичной системе - в виде "0" и "1". Эти цифры дают возможность другим компьютерам определить откуда появился запрос или куда необходимо переслать информацию. 2

Статический и динамический IP • Часть компьютеров имеет постоянные IP-адреса, еще большое количество IP-адресов Статический и динамический IP • Часть компьютеров имеет постоянные IP-адреса, еще большое количество IP-адресов служат для технических надобностей, и только часть IP-адресов свободна для пользователей, которые подключились к интернету. Эта часть свободных IPадресов называется динамическими IP-адресами, все остальные - статические. Динамические IPадреса помогают увеличить количество свободных доступных IP-адресов. 3

Статический и динамический IP • Это работает так: вы, подключаясь к интернету, получаете динамический Статический и динамический IP • Это работает так: вы, подключаясь к интернету, получаете динамический IP-адрес. Далее вы работаете с интернетом, после - вы отключаетесь от сети интернет, выключаете компьютер. И ваш динамический адрес получает совершенно другой человек, который в этот момент решил войти в сеть. • Но не все пользователи могут подключаться к сети интернет с динамическим IP-адресом, например если компьютер используется как сервер или хранилище информации, к которому подключаются другие пользователи требуется статический IP-адрес, т. е. постоянное имя, которое будут знать другие пользователи. 4

Роутер 5 Роутер 5

Роутер • Например в офисе есть локальная сеть, состоящая из 5 компьютеров. Всем нужны Роутер • Например в офисе есть локальная сеть, состоящая из 5 компьютеров. Всем нужны постоянные IPадреса, но покупать 5 постоянных адресов это не выход. Есть более простое решение. Все компьютеры будут иметь одинаковый IP-адрес внешне, а внутри своей маленькой сети будут иметь разные имена - внутренние IP-адреса. Выходить в интернет все они будут через главный компьютерроутер (маршрутизатор), и данные из интернета будут приходить вначале на этот маршрутизатор, и далее отправляться туда, откуда их запросили. 6

Порт • Порт - это числовой идентификатор программы или процесса, которые обслуживают сетевые соединения Порт • Порт - это числовой идентификатор программы или процесса, которые обслуживают сетевые соединения на заданном сетевом адресе (IPадресе). • Имеются так называемые стандартные порты, соглашения об использовании, которых все стараются придерживаться. (0 -1023) 7

Маска подсети • Маской сети или маской подсети (network mask) называется битовая маска, определяющая, Маска подсети • Маской сети или маской подсети (network mask) называется битовая маска, определяющая, какая часть IP-адреса узла сети относится к адресу сети, а какая - к адресу самого узла в этой сети. • Маска подсети — это тоже 32 -бита. Но в отличии от IPадреса, нули и единицы в ней не могут чередоваться. • Не может быть маски 120. 22. 123. 12=01111000. 00010110. 01111011. 00001100. Но может быть маска 255. 248. 0=11111111000. 0000. 8

Маска подсети • Например, узел с IP-адресом 12. 34. 56. 78 и маской подсети Маска подсети • Например, узел с IP-адресом 12. 34. 56. 78 и маской подсети 255. 0. 0 находится в сети 12. 34. 0. 0. • Компьютерам маска подсети нужна для определения границ подсети. Чтоб каждый мог определить, кто находится с ним в одной подсети, а кто — за ее пределами. Дело в том, что внутри одной сети компьютеры обмениваются пакетами «напрямую» , а когда нужно послать пакет в другую сеть — шлют их шлюзу по умолчанию 9

Сокет • Cокет – это комбинация IP-адреса и порта. Сокет адрес дает возможность другим Сокет • Cокет – это комбинация IP-адреса и порта. Сокет адрес дает возможность другим компьютерам в сети находить определенную программу, которая исполняется на определенном компьютере. • Вы можете отображать сокет адрес вот так 64. 104. 137. 58: 80, где 64. 104. 137. 58 – IP-адрес и 80 – порт. 10

Алгоритм работы В целом алгоритм работы системы клиент-сервер выглядит следующим образом: • Сервер подключается Алгоритм работы В целом алгоритм работы системы клиент-сервер выглядит следующим образом: • Сервер подключается к порту на хосте и ждет соединения с клиентом; • Клиент создает сокет и пытается соединить его с портом на хосте; • Если создание сокета прошло успешно, то сервер переходит в режим ожидания команд от клиента; • Клиент формирует команду и передает ее серверу, переходит в режим ожидания ответа; • Сервер принимает команду, выполняет ее и пересылает ответ клиенту. • и т. д. 11

Эхо-сервер Это простейшая реализация клиент-серверного приложения. Клиент отправляет данные серверу. Сервер отсылает эти же Эхо-сервер Это простейшая реализация клиент-серверного приложения. Клиент отправляет данные серверу. Сервер отсылает эти же данные обратно на клиент. 12

Сервер Для создания сокетов и управления ими в Java есть специальные классы java. net. Сервер Для создания сокетов и управления ими в Java есть специальные классы java. net. Socket и java. net. Server. Socket. Первый для клиента, второй для сервера. Также нам будут необходимы два класса из пакета java. io. *: Buffered. Reader и Print. Writer для чтения/записи в сокет. 13

Сервер Для начала подключимся к порту хоста. Сделать это можно с помощью конструктора класса Сервер Для начала подключимся к порту хоста. Сделать это можно с помощью конструктора класса Server. Socket servers; try { servers = new Server. Socket(4444); } catch (IOException e) { System. out. println("Couldn't listen to port 4444"); System. exit(-1); } 14

Сервер После успешного подключения к порту сервер должен ждать подключения от клиента. Socket fromclient; Сервер После успешного подключения к порту сервер должен ждать подключения от клиента. Socket fromclient; try { System. out. print("Waiting for a client. . . "); fromclient = servers. accept(); System. out. println("Client connected"); } catch (IOException e) { System. out. println("Can't accept"); System. exit(-1); } 15

Сервер Как только клиент подключился к серверу, сервер должен создать потоки ввода и вывода Сервер Как только клиент подключился к серверу, сервер должен создать потоки ввода и вывода для связи с ним. Buffered. Reader in; Print. Writer out; in = new Buffered. Reader(new Input. Stream. Reader(fromclient. get. Input. Stream())); out = new Print. Writer(fromclient. get. Output. Stream(), true); 16

Сервер И далее можно просто считывать данные из потока in и записывать данные в Сервер И далее можно просто считывать данные из потока in и записывать данные в out. while ((input = in. read. Line()) != null) { if (input. equals. Ignore. Case("exit")) break; out. println("S : : : "+input); System. out. println(input); } 17

Клиент • Для создания клиента достаточно класса Socket и двух классов для ввода/вывода. Также Клиент • Для создания клиента достаточно класса Socket и двух классов для ввода/вывода. Также необходимо знать имя компьютера (хоста), на котором запущен сервер и номер порта. Конструктор сокета имеет два параметра: имя хоста и номер порта. Socket fromserver = null; fromserver = new Socket("localhost", 4444); localhost(loopback) – это доменное имя, соответствующее IP адресу 127. 0. 0. 1, указывающему компьютеру на самого себя 18

Клиент Далее аналогичным образом, как для сервера, создаем потоки ввода вывода. Buffered. Reader in Клиент Далее аналогичным образом, как для сервера, создаем потоки ввода вывода. Buffered. Reader in = new Buffered. Reader(new Input. Stream. Reader(fromserver. get. Input. Stream())); Print. Writer out = new Print. Writer(fromserver. get. Output. Stream(), true); Buffered. Reader inu = new Buffered. Reader(new Input. Stream. Reader(System. in)); 19

Клиент И далее можно просто считывать данные из потока inu и записывать данные в Клиент И далее можно просто считывать данные из потока inu и записывать данные в out. while ((fuser = inu. read. Line()) != null) { out. println(fuser); fserver = in. read. Line(); System. out. println(fserver); if (fuser. equals. Ignore. Case("close")) break; if (fuser. equals. Ignore. Case("exit")) break; } 20