Реализация отношений клиент сервер java

Клиент-сервер на Java

Это первое приложение в односторонней связи. В случае односторонней связи клиент отправляет на сервер, но сервер не отправляет обратно клиенту. При двусторонней связи клиент отправляет на сервер, а сервер отправляет обратно клиенту.

Всего в приложении TCP / IP 4 варианта.

APPLICATION NUMBER FUNCTIONALITY
1st application Client to server communication (one-way)
2nd application Server to client communication (one-way)
3rd application Server sends file contents to client (two-way, non-continuous)
4th application Chat program (two-way, continuous)

1-е Приложение клиент-сервер

Приложение состоит из двух программ. Клиентская программа, работающая на стороне клиента, и серверная программа, работающая на стороне сервера. Клиентская программа WishesClient.java отправляет серверу наилучшие пожелания, а серверная программа WishesServer.java получает сообщение и печатает на своем терминале (мониторе).

Клиентская программа – WishesClient.java

import java.net.Socket; import java.io.OutputStream; import java.io.DataOutputStream; public class WishesClient < public static void main(String args[]) throws Exception < Socket sock = new Socket("127.0.0.1", 5000); String message1 = "Accept Best Wishes, Serverji"; OutputStream ostream = sock.getOutputStream(); DataOutputStream dos = new DataOutputStream(ostream); dos.writeBytes(message1); dos.close(); ostream.close(); sock.close(); >> Socket sock = new Socket ("127.0.0.1", 5000);

Конструктор класса Socket принимает два параметра – строку, IP-адрес сервера и целое число, номер порта на сервере, к которому клиент хотел бы подключиться. 127.0.0.1 – это адрес по умолчанию локальной системы в компьютерных сетях.

OutputStream ostream = sock.getOutputStream ();

Метод getOutputStream() класса Socket возвращает объект OutputStream, здесь объект является ostream. Это отправная точка всего общения (программы). Здесь сокет связан с потоками. Потоки способствуют передаче данных.

DataOutputStream dos = new DataOutputStream (ostream); dos.writeBytes (message1);

OutputStream является абстрактным классом; он не может быть использован напрямую. В приведенном выше коде он связан с конкретным классом DataOutputStream. Метод writeBytes() объекта DataOutputStream принимает строковое сообщение и передает его в Socket. Теперь клиентский сокет отправляется на другой сокет на сервере. Когда работа закончится, закройте потоки и сокет. Он освобождает дескрипторы (ссылки), связанные с системными ресурсами.

Читайте также:  Java socket bind exception

Ниже приведены исключения в вышеприведенной программе, создаваемые конструктором и различными методами.

  • Socket(“127.0.0.1”, 5000) выдает UnknownHostException
  • getOutputStream() генерирует IOException
  • writeBytes (message1) выдает IOException
  • Все методы close() выдают IOException
  • Серверная программа – WishesServer.java
import java.net.ServerSocket; import java.net.Socket; import java.io.InputStream; import java.io.DataInputStream; public class WishesServer < public static void main(String args[]) throws Exception < ServerSocket sersock = new ServerSocket(5000); System.out.println("server is ready"); // message to know the server is running Socket sock = sersock.accept(); InputStream istream = sock.getInputStream(); DataInputStream dstream = new DataInputStream(istream); String message2 = dstream.readLine(); System.out.println(message2); dstream .close(); istream.close(); sock.close(); sersock.close(); >>

ServerSocket sersock = новый ServerSocket (5000);

У сервера есть два задания: одно, как и ожидалось, должно связываться, а другое связывает соединение с номером порта 5000. Для связи он использует Socket, а для привязки – ServerSocket.

Связывание – это не что иное, как выделение номера порта клиенту так долго, как ему хотелось бы; Между тем, если какой-либо другой клиент запрашивает номер порта 5000, он не должен выделяться сервером. Когда клиент отключается, порт освобождается и может быть предоставлен другому клиенту сервером.

Socket sock = sersock.accept ();

accept() – это метод класса ServerSocket, используемый сервером для привязки соединения по номеру порта 5000, запрошенного клиентом.

InputStream istream = sock.getInputStream();

Метод getInputStream() объекта Socket возвращает объект InputStream, и это отправная точка серверной программы. Сервер использует входной поток при получении сообщения.

DataInputStream dstream = new DataInputStream (istream);

Поскольку InputStream является абстрактным классом, его нельзя использовать напрямую. Он связан с конкретным классом DataInputStream.

String message2 = dstream.readLine();

Метод readLine() объекта DataInputStream читает строку сообщения из сокета и возвращает ее. Это сообщение печатается на консоли.

Примечание. При компиляции этой программы вы получаете предупреждение из-за метода readLine() объекта DataInutStream; но программа выполняется. Чтобы избежать этого предупреждения, в следующей программе используется BufferedReader.

Выполнение клиентских и серверных программ

В одной системе, чтобы действовать как клиент и сервер, откройте два шDOS и обработайте одно как клиент, а другой – как сервер. Из одного приглашения DOS сначала запустите серверную программу, а из другого приглашения DOS запустите клиентскую программу. Вы получаете вывод при запросе сервера DOS.

Это приложение и следующее – только односторонняя связь, отправляющая или получающая. Но второй набор (после следующего) приложений является двусторонним, когда клиент и сервер могут отправлять и получать (оба). Для тестирования на выделенных серверах, можно обратиться сюда https://www.mixtelecom.ru/arenda-serverov.html

Для лучшего понимания вопрос-ответ из пакета java.lang.

Сколько существует типов внутренних классов?
Ответ: 4 типа.

Что такое файлы JAR?
Ответ: JAR-файл – это заархивированный файл, сжатый JVM.

Как преобразовать строку в форму типа данных?
Ответ: Преобразование строки в тип данных – байтовое, короткое, целое, длинное, плавающее, двойное, символьное и логическое.

Как преобразовать объект в строку?
Ответ: Объект в строку – toString()

Как сравнить два объекта?
Ответ: Сравнение объектов – hashCode() & equals()

Средняя оценка 3.1 / 5. Количество голосов: 16

Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.

Видим, что вы не нашли ответ на свой вопрос.

Напишите комментарий, что можно добавить к статье, какой информации не хватает.

Источник

Занятие 12. Реализация клиент-серверной модели на Java. кратко

Занятие 12. Реализация клиент-серверной модели на Java.

Занятие 12. Реализация клиент-серверной модели на Java.

Понятие порта Компьютер (обычно) имеет только одно физическое соединение с сетью Соединение описывается, например, 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

Занятие 12. Реализация клиент-серверной модели на Java.

Связь с файловой системой TCP/IP в рамках UNIX Интерфейс сокетов – через системные вызовы UNIX Системные вызовы ввода-вывода UNIX выглядят как последовательный цикл:

Нет различий между файлами и внешними устройствами

Проблемы сетевого ввода/вывода

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

  • Нет пассивных операций ввода-вывода
  • Не умеют устанавливать соединения
  • Используется фиксированный адрес файла
  • Соединение с файлом доступно на протяжении всего цикла запись-считывание Для не ориентированных на соединение протоколов фиксированный адрес – проблема: при передаче дейтаграммы адрес есть, а соединения нет

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

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

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

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

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

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

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

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

Занятие 12. Реализация клиент-серверной модели на Java.

Абстракция сокета serverport client connection request serverport p o r t clientport connection

А что же на Java?

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

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

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

Пакет java.net

Передача/прием дейтаграмм через UDP Обнаружение/идентификация сетевых ресурсов

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

Адресация

Адрес сокета InetAddress Inet4Address Inet6Address SocketAddress InetSocketAddress

Занятие 12. Реализация клиент-серверной модели на Java.

Занятие 12. Реализация клиент-серверной модели на Java.

Занятие 12. Реализация клиент-серверной модели на Java.

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

  • Socket()
  • Socket(InetAddress address, int port)
  • Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
  • Socket(String host, int port)
  • Socket(String host, int port, InetAddress localAddr, int localPort)
  • void close()
  • InetAddress getLocalAddress()
  • InputStream getInputStream()
  • OutputStream getOutputStream()
  • static void setSocketImplFactory(SocketImplFactory fac)
  • И прочие…

Занятие 12. Реализация клиент-серверной модели на Java.

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

  • Открытие сокета
  • Открытие потока ввода и/или потока вывода для сокета
  • Чтение и запись в потоки согласно установленному протоколу общения с сервером
  • Закрытие потоков ввода-вывода
  • Закрытие сокета

Пример клиента import java.io.*;

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

in = new BufferedReader(new InputStreamReader( echoSocket.getInputStream()));

Пример клиента BufferedReader stdIn = new BufferedReader( new InputStreamReader(System.in));

while ((userInput = stdIn.readLine()) != null) < out.println(userInput);

Занятие 12. Реализация клиент-серверной модели на Java.

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

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

System.exit(-1);> Socket clientSocket = null;

Занятие 12. Реализация клиент-серверной модели на Java.

Сервер параллельной обработки запросов

Стадия 1 Установление соединения клиент-сервер

Стадия 2 Сервер параллельной обработки передает управление дочернему процессу

Стадия 3 Если во время обработки запроса поступает запрос от другого клиента, сервер параллельной обработки передает управление новому дочернему процессу

Клиент 1 Сервер Клиент 1 Дочерний процесс 1 Сервер Клиент 1 Дочерний процесс 1 Сервер Клиент 2 Дочерний процесс 2

Занятие 12. Реализация клиент-серверной модели на Java.

Дейтаграммы

Дейтаграмма – независимое, самодостаточное сообщение, посылаемое по сети, чья доставка, время (порядок) доставки и содержимое не гарантируются Могут использоваться как для адресной, так и для широковещательной рассылки

Класс DatagramPacket Экземпляры класса являются прототипами дейтаграмм- сообщений

  • byte[] getData()
  • int getLength()
  • int getOffset()
  • SocketAddress getSocketAddress()
  • void setSocketAddress(SocketAddress address)
  • void setData(byte[] buf, int offset, int length)
  • И прочие…

Экземпляры являются не ориентированными на соединение сокетами

  • void bind(SocketAddress addr)
  • void close()
  • void connect(InetAddress address, int port)
  • void send(DatagramPacket p)
  • void receive(DatagramPacket p)
  • И другие…

Занятие 12. Реализация клиент-серверной модели на Java.

Uniform Resource Locator

Занятие 12. Реализация клиент-серверной модели на Java.

URL – адрес ресурса в Интернет Имя протокола Протокол, используемый для связи Имя хоста Имя компьютера, на котором расположен ресурс Имя файла Путь к файлу на компьютере Номер порта Номер порта для соединения (необязателен) Ссылка Ссылка на именованный якорь (необязательна) Может быть абсолютным и относительным URL gamelan = new URL(«http», «www.gamelan.com», 80, «pages/Gamelan.network.html»);

Прямое чтение из URL import java.net.*;

BufferedReader in = new BufferedReader( new InputStreamReader( yahoo.openStream()));

Занятие 12. Реализация клиент-серверной модели на Java.

Чтение из URL-соединения import java.net.*;

URLConnection yc = yahoo.openConnection();

BufferedReader in = new BufferedReader( new InputStreamReader( yc.getInputStream()));

Запись в URL-соединение import java.io.*;

> String stringToReverse = URLEncoder.encode(args , «US-ASCII»);

URL url = new URL( «http://java.sun.com/cgi-bin/backwards»);

Занятие 12. Реализация клиент-серверной модели на Java.

Запись в URL-соединение URLConnection connection = url.openConnection();

PrintWriter out = new PrintWriter( connection.getOutputStream());

BufferedReader in = new BufferedReader( new InputStreamReader( connection.getInputStream()));

while ((inputLine = in.readLine()) != null) System.out.println(inputLine);

Занятие 12. Реализация клиент-серверной модели на Java.

Занятие 12. Реализация клиент-серверной модели на Java.

См . Об этом говорит сайт https://intellect.icu . также

В общем, мой друг ты одолел чтение этой статьи об клиент-сервер на java. Работы в переди у тебя будет много. Смело пишикоментарии, развивайся и счастье окажется в ваших руках. Надеюсь, что теперь ты понял что такое клиент-сервер на java и для чего все это нужно, а если не понял, или есть замечания, то нестесняся пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории ООП и практические JAVA

Источник

Оцените статью