Программирование сокетов на Java: краткое руководство

Опубликовано: 2022-05-21

В Java программирование сокетов — это средство для связи между программами и поддержания связи с различными JRE — как серверами, ориентированными на соединение, так и серверами, не ориентированными на соединение. Сокет сервера Java используется исключительно для инициирования и обработки связи между сервером и клиентом.

В этом блоге будет рассказано все, что нужно знать о программировании сокетов.

Оглавление

Программирование сокетов в Java

Программирование сокетов — это процесс дополнения и использования отдельных сетевых узлов в интерактивном режиме. Это система двусторонней связи, в которой один сокет (узел) прослушивает определенный порт с IP-адресом, а другой сокет подключается.

Сокеты в Java

В Java сокеты — это один из концов двустороннего коммуникационного канала, соединяющего две сетевые программы. Уровень TCP используется для присвоения номера порта данному сокету Java для идентификации приложения, которому мы передаем данные. Мы используем комбинацию IP-адреса и номера порта для создания конечной точки.

Платформа Java включает класс Socket, который реализует одну сторону двустороннего сетевого соединения между вашим Java-приложением и другой программой. Класс находится поверх независимой от платформы реализации, ограждая вашу Java-программу от деталей, специфичных для системы.

Используя класс вместо определенного собственного кода, ваши Java-программы могут обмениваться данными по сети независимым от платформы способом.

Кроме того, java.net включает класс ServerSocket, который реализует сокет, который серверы могут использовать для прослушивания и приема соединений от клиентов. Это пример, показывающий, как использовать классы ServerSocket и Socket.

Между портом на стороне клиента и портом на стороне сервера создается соединение.

Установление соединения с сокетом Java [СТОРОНА КЛИЕНТА]

Прежде чем продолжить программирование на стороне клиента, клиент должен дождаться запуска сервера. После запуска он начнет отправлять запросы на сервер Java. Затем клиент будет ждать ответа сервера. Это хорошее краткое изложение логики соединения клиент-сервер.

Давайте рассмотрим программирование на стороне клиента более подробно.

Чтобы подключиться к другому компьютеру, вам потребуется подключение через сокет. Два компьютера должны знать, где они находятся в сети (IP-адрес) и какой TCP-порт они используют для установления соединения через сокет. Фреймворк java.net обозначает класс сокета.

IP-адрес сервера является первым входным аргументом. Порт TCP является следующим параметром здесь. (Это не что иное, как число, указывающее, какая программа должна быть запущена на сервере.) HTTP, например, использует порт 80. Обычно диапазон номеров портов лежит в диапазоне от 0 до 65535.

Коммуникация

Потоки используются для ввода и вывода данных при обмене данными через соединение через сокет. После того, как вы отправили запросы и установили надежное соединение, вы должны отключить соединение через сокет.

Закрытие соединения сокета Java Server

Сокетное соединение явно закрывается после отправки сообщения на сервер, сокетное соединение явно закрывается.

// Демонстрационная Java-программа для клиентов

импортировать java.net.*;

импортировать java.io.*;

открытый класс Client_Side_Program

{

// для инициализации потоков сокетов, потоков ввода и вывода

частный сокет socket = null;

частный ввод DataInputStream = null;

частный DataOutputStream out = null;

// конструктор для размещения порта TCP и IP-адреса

общедоступный клиент (добавление строки, порт int)

{

// устанавливаем соединение

пытаться

{

сокет = новый сокет (добавить, порт);

System.out.println («Подключено»);

// принимает ввод с терминала

ввод = новый DataInputStream (System.in);

// отправляет вывод в сокет

out = новый DataOutputStream (socket.getOutputStream());

}

поймать (UnknownHostException u)

{

Система.out.println(u);

}

поймать (IOException я)

{

Система.out.println(i);

}

// строка для чтения сообщения из ввода

строка строка = "";

// продолжаем чтение, пока не будет введено «Over»

в то время как (!line.equals("Over"))

{

пытаться

{

строка = ввод.readLine();

out.writeUTF(строка);

}

поймать (IOException я)

{

Система.out.println(i);

}

}

// закрываем соединение

пытаться

{

ввод.закрыть();

выход.закрыть();

сокет.закрыть();

}

поймать (IOException я)

{

Система.out.println(i);

}

}

public static void main (String args [])

{

Клиент клиент = новый клиент («127.0.0.1», 5000);

}

}

Чтобы посетить источник этого кода, нажмите здесь .

Установление соединения с сокетом Java [СТОРОНА СЕРВЕРА]

Сервер создает свой объект и ожидает запроса клиента, рассматривая соединение на стороне сокета сервера Java. Сервер будет взаимодействовать с клиентом после отправки запроса. Вам понадобятся два сокета для кодирования приложения на стороне сервера, которое выглядит следующим образом: когда клиент создает новый Socket(), создается ServerSocket для ожидания клиентских запросов. Простой сокет можно определить как программу, которая инициирует связь на стороне сервера с клиентом. Вы можете соответствующим образом передавать ответы клиенту, как только вы получите отчет от соединения сокета на стороне сервера java.

Коммуникация

Чтобы использовать сокет для отправки вывода, мы обычно ожидаем использования метода getOutputStream().

Закрытие соединения сокета Java Server

Крайне важно завершить соединение, отключив и сокет, и потоки ввода-вывода.

// Java-программа для сервера

импортировать java.net.*;

импортировать java.io.*;

сервер открытого класса

{

// инициализируем сокет и входной поток

частный сокет socket = null;

частный сервер ServerSocket = null;

частный DataInputStream in = null;

// конструктор с портом

общедоступный сервер (внутренний порт)

{

// ждем соединения после запуска сервера

пытаться

{

сервер = новый серверный сокет (порт);

System.out.println("Сервер: запущен");

System.out.println("Ожидание прихода клиента...");

сокет = сервер.принять();

System.out.println("Клиент принят");

// для ввода клиентского сокета

in = новый поток ввода данных (

новый BufferedInputStream (socket.getInputStream()));

строка строка = "";

// для чтения сообщения от клиента, пока не будет отправлено «Over»

в то время как (!line.equals("Over"))

{

пытаться

{

строка = in.readUTF();

System.out.println(строка);

}

поймать (IOException я)

{

Система.out.println(i);

}

}

System.out.println("Закрытие соединения");

// закрыть соединение

сокет.закрыть();

in.закрыть();

}

поймать (IOException я)

{

Система.out.println(i);

}

}

public static void main (String args [])

{

Сервер сервер = новый сервер (5000);

}

}

Чтобы проверить детали этого кода, нажмите здесь .

Вы можете сначала запустить серверное программное обеспечение после настройки как клиента, так и сервера. Затем вы должны запустить программное обеспечение на стороне клиента и отправить запрос. Сервер немедленно отреагирует, когда запрос поступит с клиентской стороны.

Изучите наши популярные курсы по программной инженерии

Сл. Нет Программы разработки программного обеспечения
1 Магистр компьютерных наук LJMU и IIITB Программа сертификатов кибербезопасности Caltech CTME
2 Учебный курс по полной разработке стека Программа PG в блокчейне
3 Программа Executive Post Graduate Program в области разработки программного обеспечения - специализация в DevOps Просмотреть все курсы по программной инженерии

Терминал или командная строка запущены

Чтобы запустить терминал или командную строку, мы будем использовать следующие команды. Для начала создадим два окна, одно будет выделено для сервера, а другое для клиента.

  1. Пусть программа сервера запустится.

$ Java-сервер

  1. Затем в другом терминале запустите клиентское приложение как

Java-клиент $

Программное обеспечение покажет «Подключено» и «Клиент принят», когда сервер принимает клиента.

  1. В поле «Клиент» вы можете начать вводить сообщения. Вот пример ввода клиента.

Привет! Это мое первое профессиональное подключение к розетке.

Которые Сервер получает и отображает одновременно

Привет! Это мое первое профессиональное подключение к розетке.

Над.

Закрытие соединения

Как указывалось ранее, отправка «Over» завершает соединение между Клиентом и Сервером.

Прочтите наши популярные статьи, связанные с разработкой программного обеспечения

Как реализовать абстракцию данных в Java? Что такое внутренний класс в Java? Идентификаторы Java: определение, синтаксис и примеры
Понимание инкапсуляции в ООП на примерах Объяснение аргументов командной строки в C 10 основных функций и характеристик облачных вычислений в 2022 году
Полиморфизм в Java: концепции, типы, характеристики и примеры Пакеты в Java и как их использовать? Учебник по Git для начинающих: Изучайте Git с нуля

Вывод

Программирование Java Socket — важный инструмент, который использует API-интерфейсы сокетов для установления связи между локальными и удаленными клиент-серверными приложениями. Надлежащее знание программирования сокетов может улучшить соединения между сервером и клиентом.

Если вы хотите изучить Java и освоить полнофункциональную разработку, у нас есть для вас высокоэффективный курс: программа upGrad Executive PG по разработке программного обеспечения — специализация по полнофункциональной разработке .

13-месячная программа от IIIT-B предназначена для того, чтобы помочь учащимся приобрести такие навыки, как основы компьютерных наук, процессы разработки программного обеспечения, серверные API и интерактивный веб-интерфейс. Вы получаете доступ к учебному курсу Software Career Transition Bootcamp как для нетехнических, так и для новых программистов, чтобы отточить свои навыки программирования, а также всестороннюю поддержку карьеры от upGrad.

Изучайте онлайн-курсы по разработке программного обеспечения в лучших университетах мира. Участвуйте в программах Executive PG, Advanced Certificate Programs или Master Programs, чтобы ускорить свою карьеру.

Каковы преимущества изучения программирования сокетов Java?

Сокеты могут использоваться для создания клиент-серверного приложения, такого как чат, с сетевой точки зрения. Сокеты реализованы на самом базовом уровне безопасности, чтобы определить, открыты ли системные порты, есть ли стандартные программы сканирования портов, такие как Nmap, и можно ли их использовать на низком уровне. Их можно использовать так же, как команду SSH — Secure Socket Shell для подключения к внешнему серверу через обратную оболочку.

Что делает функция принятия?

Функция accept ожидает, пока клиент подключится к серверу, блокируя его пребывание там до тех пор, пока не прибудет аргумент. Затем мы используем функцию getInputStream для получения ввода из сокета. Сервер спроектирован таким образом, что он продолжает принимать отправленные сообщения до тех пор, пока не будет получена команда Over.

Почему потоки используются в сетевом программировании?

Мы хотим, чтобы несколько клиентов присоединялись одновременно. Итак, мы должны использовать потоки на стороне сервера, чтобы каждый запрос клиента мог обрабатывать другой поток. Предположим ситуацию, когда на сервер одновременно приходят два запроса. Поскольку в нашем простом клиентско-серверном приложении не указан метод одновременной обработки нескольких запросов, запрос, прибывший даже на наносекунду раньше, сможет соединиться с сервером, в то время как другой запрос будет отклонен.