Java – перспективный язык программирования. Он позволяет создавать программное обеспечение разных типов и может применяться для того, чтобы писать полноценные клиент-серверные модели.
В данной статье будет рассказано о работе с сокетами в Java, о клиентах и серверах. Предложенный материал пригодится даже тем, кто уже имел практику в разработке.
Определение
Клиент-сервер – это специализированная вычислительная или сетевая структура. В ней задания или нагрузка будут распределяться между поставщиками услуг. Последние носят название серверов. Заказчики тоже фигурируют в модели. Они называются клиентами.
Клиент-сервер – программное обеспечение, расположенное в пределах одной (но чаще – нескольких) машины, взаимодействующее друг другом посредством сетевых протоколов.
Клиенты
Клиент – это компьютер или иное оборудование/программное обеспечение, которое будет отправлять на серверы запросы. Это необходимо для выполнения задуманных изначально задач, а также предоставления информации.
Серверы
Сервер – устройство, которое принимает запросы. После этого ведет обработку соответствующей команды и предоставляет клиенту ответ в установленном формате. Пример – выдача результатов поиска или раскрытие папки.
Сервером может выступать:
- компьютер;
- ноутбук;
- иное оборудование или программное обеспечение.
Servers обычно намного мощнее, чем clients. Связано это с повышенной нагрузкой на соответствующий девайс.
О ролях клиентов и серверов
Клиент серверное приложение немыслимо без упомянутых ранее компонентов. Софт такого характера пишется на самых разных языках, включая Java. Но перед углубленным их изучением стоит разобраться в общих принципах и понятиях. Во всех ситуациях модель функционирует одинаково. Меняется только исходный код будущего приложения.
Согласно существующей характеристике клиент-сервера, модель описывает отношения взаимодействующих друг с другом программ в приложении. Здесь рекомендуется запомнить следующее:
- Серверный компонент отвечает за предоставление функций или услуг одному или нескольким клиентам.
- Клиенты инициируют запросы на услуги/команды.
- Серверы имеют классификацию по предоставляемому обслуживанию. Пример – веб. Он отвечает за обслуживание сайтов. А server типа «файловый» занимается обслуживанием компьютерных документов.
- Связь между несколькими серверами носит название межсерверной.
Одно устройство может одновременно выступать клиентом и сервером. Но для реализации подобной модели предстоит обеспечить оборудование стабильной работой и огромным количеством ресурсов.
Принцип работы
Перед написанием программы на Джава, которая отвечает за client server, нужно четко понимать принцип ее работы. При использовании соответствующего подхода происходит следующее:
- Клиент формирует запрос. Делается это в установленной заранее форме.
- Происходит отправка команды на сервер.
- Серверное оборудование или приложение принимает сигнал от client.
- Осуществляется обработка заданной команды.
- Сервер предоставляет ответ на запрос.
Стоит обратить внимание, что при прекращении работы сервера клиент продолжит функционировать. Он просто потеряет связь. Наглядный пример – подключение к онлайн-игре. Если на его сервере ведутся технические работы, client отключается, но существовать не прекращает. Именно поэтому для servers важна мощность и стабильность.
Ключевые компоненты
Используемые приложения образовывают единую систему. Она обязательно включает в себя следующие элементы:
- Client. Рабочая станция, входная точка конечного пользователя в заданной системе.
- Server. Устройство, которое будет взаимодействовать с clients. Необходимо для решения тех или иных задач.
- Сеть. Средство передачи информации. Рабочие машины при помощи соответствующей составляющей можно объединить для получения общих ресурсов.
- Приложения. Они способны вести обработку данных, организовывать физическое распределение информации между клиент-серверной моделью.
Стоит также обратить внимание на сокеты и потоки. Первое понятие в Джаве имеет широкое применение. Их можно запрограммировать особым образом, о чем зайдет речь далее. Сокет не имеет однозначного определения. Потоки – это установленные в изучаемой модели связи. Их некоторые разработчики называют Threads или «нити».
Преимущества и недостатки
Архитектура клиент-серверного типа обладает своими сильными и слабыми сторонами. Соответствующие нюансы необходимо знать каждому разработчику перед тем, как начинать работу с сокетами и рассматриваемым ПО.
Сильные стороны
К плюсам модели можно отнести следующие особенности:
- низкие требования к клиентским рабочим станциям;
- вычислительные операции будут выполняться на серверах;
- гибкая система;
- повышенная защита локальной сети.
А еще программный код при создании разделяется на клиентскую и серверную части. Это помогает обезопасить его, а также быстро искать и исправлять ошибки/неполадки.
Слабые стороны
У client-server архитектуры также есть определенные минусы. К ним обычно относят:
- высокую стоимость серверов и повышенные к ним ресурсные требования;
- обслуживание servers доверяют только специально обученным специалистам;
- прекращение работы client, если на серверной части «что-то пошло не так».
Но рассматриваемая архитектура является одной из самых распространенных. Она активно используется многими языками программирования. Выходит в 21 веке на передовые линии.
Работа с сокетами
Сокет – программная абстракция, которая применяется для предоставления терминалов соединения между несколькими устройствами.
Socket – программная (логическая) конечная точка, устанавливающая двунаправленную коммуникацию между сервером, а также одним или несколькими клиентами. На физическом уровне он не существует.
В своей работе сокет будет использовать порты на основном устройстве для реализации программного обеспечения. Данный прием дает возможность разработчикам комфортно работать с низкоуровневыми компонентами сетевых коммуникаций. Пример – порты, маршрутизация. Все операции осуществляются непосредственно в прикладном коде.
Программирование сокетов – это своеобразный способ соединения друг с другом двух узлов в пределах одной сети. Socket представляет собой «узел». Один из них будет прослушивать установленный порт на IP-адресе. Другой – обращаться к первому для формирования надежного соединения.
Стоит обратить внимание на то, что server будет отвечать за формирование слушателя. В Java для программирования сокетов будут использоваться специальные классы. Они называются Socket и Server Socket.
Как функционирует
Перед тем, как составлять программное обеспечение клиент-серверной модели, а также программировать сокеты, нужно понимать, как они функционируют. В случае с архитектурой разобраться достаточно легко. Но сокеты требуют отдельного внимания.
TCP-сокет будет устанавливать связь между server и client. Это происходит в несколько шагов:
- На серверной части создается конечная точка для соединения.
- Сокету присваивается уникальный номер. Это – его идентификатор. Для него будет резервироваться уникальная комбинация IP-адреса, а также порта.
- После того, как сокет создан, server находится в режиме ожидания. Соответствующий этап осуществляется до тех пор, пока не подключится client.
- Серверная часть получает запрос на подключение клиентского «аппарата» от соответствующего сокета.
- Обе составляющие модели соединяются друг с другом.
- Происходит обмен данными.
- Когда операции завершены, осуществляется прекращение работы системы. Оно характеризуется разрывом соединения.
Выше – наглядный пример описанного алгоритма. Схема поможет быстрее разобраться в системе и научить налаживать ее функционирование.
Реализация
Для программирования sockets пользователю предстоит отдельно рассматривать работу с клиентом, а также отдельно – с сервером. В противном случае добиться функционирования всей системы не получится.
Если происходит программирование на стороне клиента, сначала он будет ожидать запуска сервера. После – отправлять запросы и ждать обратной связи. Логика предельно простая и понятная. Инициировать подобную систему не слишком трудно в Java, если грамотно и поэтапно подойти к данному вопросу.
Клиентская часть
Для начала стоит рассмотреть клиентский «блок». С ним работать намного проще. Существенных требований к аппаратному обеспечению здесь нет, что значительно облегчает процесс. Остается лишь разобраться с кодами в приложениях.
Первый этап – установка соединения через socket. В данном случае подразумевается, что две машины обладают общими сведениями о сетевом расположении друг друга, а также TCP-порте.
Стоит запомнить следующую информацию:
- Socket можно создать при помощи специального оператора – new Socket. Он имеет такую форму записи:.
- Первый аргумент в операторе – это IP-адрес, который присвоен серверу.
- Второй аргумент – TCP-порт. Число, обозначающее, какое приложение будет работать на серверной стороне.
Для непосредственной установки больше ничего не требуется. Программист может установить связь. Через соединение сокета потоки будут применяться для ввода и вывода данных клиенту. После того, как соответствующая операция окажется позади, стоит задуматься над закрытием «связи». Данное действие явно производится после того, как пользователь отправит желаемый запрос на сервер.
Пример
А вот код, который наглядно продемонстрирует реализацию сокетного соединения на стороне имеющегося клиента:
// A Java program for a ClientSide
import java.net.*;
import java.io.*;
public class ClientProgram
{
// initialize socket and input output streams
private Socket socket = null;
private DataInputStream input = null;
private DataOutputStream out = null;
// constructor to put ip address and port
public Client(String address, int port)
{
// establish a connection
try
{
socket = new Socket(address, port);
System.out.println("Connected");
// takes input from terminal
input = new DataInputStream(System.in);
// sends output to the socket
out = new DataOutputStream(socket.getOutputStream());
}
catch(UnknownHostException u)
{
System.out.println(u);
}
catch(IOException i)
{
System.out.println(i);
}// string to read message from input
String line = "";
// keep reading until "Over" is input
while (!line.equals("Over"))
{
try
{
line = input.readLine();
out.writeUTF(line);
}
catch(IOException i)
{
System.out.println(i);
}
}
// close the connection
try
{
input.close();
out.close();
socket.close();
}
catch(IOException i)
{
System.out.println(i);
}
}
public static void main(String args[]) {
Client client = new Client("127.0.0.1", 5000);
}
}
Разработка на серверной стороне
Сервер будет создавать экземпляр своего объекта. После этого он будет ожидать запросы со стороны клиентов. Как только это произойдет, система обработает команду, а затем ответит на нее.
Для того, чтобы закодировать серверную программу, нужно использовать несколько сокетов:
- New ServerSocket. Он находится в ожидании клиентских запросов.
- Стандартный старый сокет. Потребуется, чтобы связываться с клиентами.
Как только сокеты будут созданы, сервер должен установить связь с клиентом с тем или иным ответом. Для вывода информации предстоит использовать обобщение. В Джаве для этого пригодится getOutputStream(). Завершающий этап – закрытие соединения. В этом случае на серверной стороне требуется прекратить работу socket, а также потоков ввода и вывода электронных материалов.
Пример работы на серверной стороне
Этот код поможет понять, как работать с sockets на стороне сервера. Можно считать его «первым приложением», реализующим рассмотренную архитектуру на Java:
// A Java program for a Serverside
import java.net.*;
import java.io.*;
public class ServerSide
{
//initialize socket and input stream
private Socket socket = null;
private ServerSocket server = null;
private DataInputStream in = null;
// constructor with port
public Server(int port)
{
// starts server and waits for a connection
try{
server = new ServerSocket(port);
System.out.println("Server started");
System.out.println("Waiting for a client ...");
socket = server.accept();
System.out.println("Client accepted");
// takes input from the client socket
in = new DataInputStream(
new BufferedInputStream(socket.getInputStream()));
String line = "";
// reads message from client until "Over" is sent
while (!line.equals("Over"))
{
try
{
line = in.readUTF();
System.out.println(line);
}
catch(IOException i)
{
System.out.println(i);
}
}
System.out.println("Closing connection");
// close connection
socket.close();
in.close();
}
catch(IOException i){
System.out.println(i);
}
}
public static void main(String args[]){
Server server = new Server(5000);
}
}
Подробный разбор
После того, как разработчик справится с настройкой клиента, а также серверной части в модели, можно запустить используемую утилиту. Стоит начать с сервера. Далее – активировать клиент, сформировать и отправить команду-запрос. Как только это произойдет, сервер выдаст тот или иной ответ:
- После запуска имеющегося сценария на стороне сервера, он будет активирован. Появится такая запись:.
- Так выглядит ситуация, при которой клиент подключается и вводит запрос. Он в примере представлен строкой.
- А вот пример того, как поведет себя сервер:.
Предложенный алгоритм помогает выполнять программы сокетов на Джаве. Они могут быть запущены как в окне терминала, так и через командную строчку.
Быстрый способ изучения
Изучая серверы и клиенты, пользователи часто не знают, с чего начать. И как получить специализированное образование – тоже. Существуют различные методы, помогающие быстро освоиться в Java, его особенностях и клиент-серверных разработках:
- Поступление в техникумы и училища. Довольно интересный вариант для тех, кто хочет заниматься программированием. Возможен для реализации после 9 или 11 класса учебы в школе. Предпочтение рекомендуется отдавать направлению «Информатика». Срок обучения – 3-5 лет. В конце выдается диплом о среднем профессиональном образовании. Сети и ЯП в этом случае затрагиваются поверхностно.
- Поступление в ВУЗы и университеты. Неплохой вариант для тех, кто планирует получать высшее образование. На направлениях «Информационные технологии» и «Разработка программного обеспечения» ученика научат «с нуля» разбираться в IT, а также писать коды. Обычно здесь рассматриваются самые распространенные языки программирования: PHP, HTML, Java, C, C++. Это – самый долгий путь получения образования. Отнимает 4-6 лет. В конце выдается диплом о высшем образовании. С дальнейшим трудоустройством проблем возникнуть не должно.
- Самообразование. Подход для особо дисциплинированных. Можно самостоятельно выбрать язык программирования, а также конкретную часть, на которой концентрироваться больше остальных. В основе заложена самодисциплина и практика. Единственная существенная проблема – это невозможность подтвердить навыки документально. Но, если участвовать в конкурсах и разнообразных проектах, у каждого будет шанс на трудоустройство в хорошую компанию по разработке контента и сетей.
Работа с сокетами в Java не доставит существенных хлопот, если отдать предпочтение обучению на дистанционных компьютерных курсах. Это – самый быстрый и эффективный подход. Программы рассчитаны как для новичков, так и для опытных разработчиков. Учебу можно осуществлять в любое время прямо через интернет. Всем гарантирована практика и помощь в сборе первого портфолио.
Компьютерные курсы позволяют в срок до 12 месяцев освоить одно или несколько направлений в IT-технологиях. Уроки проводят опытные специалисты. Пользователи получают постоянную поддержку и кураторство. Можно за несколько месяцев изучить принципы работы сетей, а также научиться писать программы на Джаве с нуля. В конце каждый ученик получит электронный сертификат установленной формы.