Java socket всем подключенным

Обмен данными по сети на основе сокетов в Java

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

Для решения этой задачи Java предоставляет различные механизмы, среди которых особое место занимают сокеты.

Сокет (англ. socket — разъём) — название программного интерфейса для обеспечения обмена данными между процессами. Процессы при таком обмене могут исполняться как на одной ЭВМ, так и на различных ЭВМ, связанных между собой сетью. Сокет — абстрактный объект, представляющий конечную точку соединения (Википедия).

Ключевое отличие сокетов от других сетевых инструментов Java (таких как HttpRequest, SMTPTransport и др.) состоит в том, что:

  • Сокеты представляют собой достаточно низкоуровневый интерфейс.
    Это позволяет работать напрямую через протокол TCP/IP и тем самым обеспечивает универсальность.
  • Сокеты позволяют обеспечить обмен данными в режиме достаточно приближенном к реальному времени.
    При отсутствии задержек при обработке и передачи данных обмен происходит с очень высокой скоростью.

Недостаток сокетов, по сути является продолжением их достоинств. Универсальность и работа на низком уровне неизбежно порождает неудобство при работе с распространёнными протоколами (того же HTTP) . Поэтому для них лучше использовать высокоуровневые средства. Но, подобные протоколы, к сожалению, не покрывают весь спектр задач сетевого программирования. Поэтому программирование на сокетах по-прежнему остаётся актуальным.

Читайте также:  Css удалить неиспользуемые стили css

Ниже мы рассмотрим примеры создания и работы серверных и клиентских сокетов на примере несложного клиент-серверного приложения.

Серверная часть

Существует два вида сокетов. Серверные и клиентские. В этой части мы рассмотрим серверные сокеты.

Серверные сокеты реализуются на основе класса ServerSocket. Они прослушивают определённый порт и по получении данных от клиента могут сформировать и передать ответ.

Ниже приведён пример создания серверного сокета для 5000 порта.

Источник

Основы программирования сокетов в Java

Программирование сокетов в Java используется для связи между приложениями, работающими на разных JRE. Он может быть ориентированным на соединение или без установления соединения. По сути, сокет – это способ установить соединение между клиентом и сервером.

Что это такое программирование сокетов?

Программирование сокетов – это способ соединения двух узлов в сети для связи друг с другом. Один сокет (узел) прослушивает определенный порт на IP-адресе, в то время как другой обращается к другому, чтобы сформировать соединение.

Связь клиент-сервер

Сервер формирует слушателя, которого клиент обращается к серверу. Классы Socket и Server Socket используются для программирования сокетов с установлением соединения.

Что такое сокет?

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

Теперь, когда вы знаете, что такое Socket в Java, давайте продолжим и разберемся, как клиент взаимодействует с сервером и как сервер отвечает в ответ.

что такое сокет в java

Клиентское программирование

В случае программирования на стороне клиента клиент сначала будет ждать запуска сервера. Как только сервер будет запущен, он отправит запросы на сервер. После этого клиент будет ждать ответа от сервера. Итак, в этом вся логика взаимодействия клиента и сервера.

Чтобы инициировать запрос клиентов, вам необходимо выполнить следующие шаги:

1. Установите соединение

Самый первый шаг – установить соединение через сокет. Соединение через сокет подразумевает, что две машины имеют информацию о сетевом расположении друг друга (IP-адрес) и TCP-порте.

Вы можете создать Socket с помощью следующего оператора:

Socket socket = new Socket («127.0.0.1», 5000)
  • Здесь первый аргумент представляет собой IP-адрес сервера.
  • Второй аргумент представляет TCP-порт (число, обозначающее, какое приложение должно работать на сервере).

2. Связь

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

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

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

Пример реализации сокетного соединения на стороне клиента

// 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); >>

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

По сути, сервер создает экземпляр своего объекта и ждет запроса клиента. Как только клиент отправит запрос, сервер ответит на него.

Для кодирования серверного приложения вам понадобятся два сокета, и они следующие:

  • ServerSocket, который ожидает клиентских запросов (когда клиент создает новый Socket()).
  • Обычный старый сокет для связи с клиентом.

После этого вам нужно связаться с клиентом с ответом.

Общение

getOutputStream() используется для отправки вывода через сокет.

Закройте соединение

Когда все будет сделано, важно закрыть соединение, закрыв сокет, а также потоки ввода / вывода.

Пример реализации сокетного соединения на стороне сервера

// 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); >>

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

1. Когда вы запускаете сценарий на стороне сервера, он запускается и ждет, пока клиент не запустится.

вывод на стороне сервера

2. Затем клиент подключается и вводит запрос в виде строки.

вывод на стороне клиента

3. Когда клиент отправляет запрос, сервер отвечает.

вывод серверной части

Вот как вам нужно выполнить программу сокета на Java. Вы также можете запускать эти программы в окне терминала или в командной строке. Но, поскольку Eclipse хорошо расширен своими функциями, вы можете просто запустить обе программы на консоли.

Источник

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