Что такое socket java
Перейти к содержимому

Что такое socket java

  • автор:

34. Java – Сеть

Термин «сетевое программирование» относится к написанию программ, которые выполняются на нескольких устройствах (компьютерах), в которых все устройства подключены друг к другу с помощью сети.

Пакет java.net набора интерфейсов прикладного программирования J2SE содержит набор классов и интерфейсов, которые предоставляют подробные сведения о низкоуровневом взаимодействии, что позволяет писать программы, ориентированные на решение существующей проблемы.

Протоколы TCP и UDP

Пакет java.net обеспечивает поддержку двух общих сетевых протоколов:

  • TCP — TCP — это протокол управления передачей, который обеспечивает надежную связь между двумя приложениями. В Java TCP обычно используется через Интернет-протокол, который называется TCP/IP.
  • UDP — UDP — это протокол пользовательских дейтаграмм, протокол без установления соединения, который позволяет передавать пакеты данных между приложениями.

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

  • Программирование сокетов — это наиболее широко используемая концепция в сетевой конфигурации, о которой было подробно изложено.
  • Обработка URL (унифицированный указатель ресурсов) — этот процесс будет рассмотрен отдельно. Перейдите по ссылке, чтобы узнать об обработке URL на языке Java.

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

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

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

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

При установлении соединения TCP между двумя компьютерами с использованием сокетов, выполняются следующие этапы:

  • Сервер создает экземпляр объекта ServerSocket, определяющий, по какому номеру порта должна происходить связь.
  • Сервер вызывает метод accept() класса ServerSocket. Этот метод ожидает, пока клиент не подключится к серверу по указанному порту.
  • По завершению ожидания сервера клиент создает экземпляр объекта сокета, указывая имя сервера и номер порта подключения.
  • Конструктор класса Socket осуществляет попытку подключить клиента к указанному серверу и номеру порта. Если связь установлена, у клиента теперь есть объект Socket, способный связываться с сервером.
  • На стороне сервера метод accept() возвращает ссылку к новому сокету на сервере, который подключен к клиентскому сокету.

После того, как соединения установлены, связь может происходить с использованием потоков входных/выходных данных. Каждый сокет имеет и OutputStream (поток выходных данных), и InputStream (поток входных данных). OutputStream клиента подключен к InputStream сервера, а InputStream клиента подключен к OutputStream сервера.

TCP является двусторонним протоколом связи, поэтому данные могут передаваться по обоим потокам одновременно. Ниже приведены полезные классы, предоставляющие полный набор методов внедрения сокетов.

Конструкторы класса ServerSocket

Класс java.net.ServerSocket используется серверными приложениями для получения порта и прослушивания клиентских запросов.

Класс ServerSocket имеет четыре конструктора:

Конструктор и описание
1 public ServerSocket(int port) throws IOException
Попытки создания серверного сокета, связанного с указанным портом. Исключение происходит, если порт уже связан другим приложением.
2 public ServerSocket(int port, int backlog) throws IOException
Как и в предыдущем конструкторе, параметр backlog указывает, сколько входящих клиентов нужно сохранить в очереди ожидания.
3 public ServerSocket(int port, int backlog, InetAddress address) throws IOException
Как и в предыдущем конструкторе, параметр InetAddress указывает локальный IP-адрес для осуществления привязки. InetAddress используется в серверах, которые могут иметь несколько IP-адресов, что позволяет серверу указывать IP-адрес приема запросов клиентов.
4 public ServerSocket() throws IOException
Создает непривязанный сокет сервера. При использовании этого конструктора используйте метод привязки (), когда будете готовы привязать сокет сервера.

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

Методы класса ServerSocket

Ниже приведены некоторые из распространенных методов в Java класса ServerSocket.

Методы и описание
1 public int getLocalPort()
Возвращает порт, который прослушивает сокет сервера. Этот метод полезен, если вы передали 0 в качестве номера порта в конструкторе и позволили серверу найти порт.
2 public Socket accept() throws IOException
Ожидает входящего клиента. Этот метод блокируется до тех пор, пока клиент не подключится к серверу на указанном порту или не истечет время ожидания сокета, при условии, что значение времени ожидания было установлено с помощью метода setSoTimeout(). В противном случае этот метод блокируется на неопределенный срок.
3 public void setSoTimeout(int timeout)
Устанавливает значение времени ожидания клиента сокетом сервера во время accept().
4 public void bind (хост SocketAddress, int backlog)
Привязывает сокет к указанному серверу и порту в объекте SocketAddress. Используйте этот метод, если вы создали ServerSocket с помощью конструктора без аргументов.

Когда ServerSocket вызывает accept(), метод не возвращается, пока клиент не подключится. После того, как клиент все-таки подключится, ServerSocket создает новый сокет для неуказанного порта и возвращает ссылку на этот новый сокет. Теперь между клиентом и сервером существует TCP-соединение, и связь может установиться.

Конструкторы класса Socket

Класс java.net.Socket представляет собой сокет, который клиент и сервер используют для связи друг с другом. Клиент получает объект сокета, создав его, тогда как сервер получает объект сокета из возвращаемого значения метода accept().

Класс Socket имеет пять конструкторов, которые клиент использует для подключения к серверу.

Конструктор и описание
1 public Socket(String host, int port) throws UnknownHostException, IOException.
Этот метод предпринимает попытку подключения к указанному серверу через указанный порт. Если этот конструктор не выдает исключение, то соединение установлено успешно, и клиент подключен к серверу.
2 public Socket(InetAddress host, int port) throws IOException
Этот метод идентичен предыдущему конструктору, за исключением того, что хост обозначается объектом InetAddress.
3 public Socket(String host, int port, InetAddress localAddress, int localPort) throws IOException.
Подключается к указанному хосту и порту, создавая сокет на локальном хосте по указанному адресу и порту.
4 public Socket(InetAddress host, int port, InetAddress localAddress, int localPort) throws IOException.
Этот метод идентичен предыдущему конструктору, за исключением того, что хост обозначается объектом InetAddress вместо строки адреса.
5 public Socket()
Создает неподключенный сокет. Используйте метод connect() для подключения такого сокета к серверу.

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

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

Методы класса Socket

Методы класса InetAddress

Этот класс представляет адрес Интернет-протокола (IP). Следующие полезные методы, которые понадобятся при программировании сокетов, представлены ниже:

и описание
1 static InetAddress getByAddress(byte[] addr)
Возвращает объект InetAddress с учетом необработанного IP-адреса.
2 static InetAddress getByAddress(String host, byte[] addr)
Создает InetAddress на основе предоставленного имени хоста и IP-адреса.
3 static InetAddress getByName(String host)
Определяет IP-адрес хоста, учитывая имя хоста.
4 String getHostAddress()
Возвращает строку IP-адреса в текстовой форме.
5 String getHostName()
Получает имя хоста для данного IP-адреса.
6 static InetAddress InetAddress getLocalHost()
Возвращает локальный хост.
7 String toString()
Конвертирует этот IP-адрес в адресную строку.

Пример Socket Client

Следующая GreetingClient – это клиентская программа, которая подключается к серверу с помощью сокета, отправляет приветствие, а затем ожидает ответа.

// Название файла GreetingClient.java import java.net.*; import java.io.*; public class GreetingClient < public static void main(String [] args) < String serverName = args[0]; int port = Integer.parseInt(args[1]); try < System.out.println("Подключение к " + serverName + " на порт " + port); Socket client = new Socket(serverName, port); System.out.println("Просто подключается к " + client.getRemoteSocketAddress()); OutputStream outToServer = client.getOutputStream(); DataOutputStream out = new DataOutputStream(outToServer); out.writeUTF("Привет из " + client.getLocalSocketAddress()); InputStream inFromServer = client.getInputStream(); DataInputStream in = new DataInputStream(inFromServer); System.out.println("Сервер ответил " + in.readUTF()); client.close(); >catch (IOException e) < e.printStackTrace(); >> > 

Пример Socket Server

Следующая программа GreetingServer является примером серверного приложения, которое использует класс сокета для прослушивания клиентов по номеру порта, указанному в аргументе командной строки.

// Название файла GreetingServer.java import java.net.*; import java.io.*; public class GreetingServer extends Thread < private ServerSocket serverSocket; public GreetingServer(int port) throws IOException < serverSocket = new ServerSocket(port); serverSocket.setSoTimeout(10000); >public void run() < while(true) < try < System.out.println("Ожидание клиента на порт " + serverSocket.getLocalPort() + ". "); Socket server = serverSocket.accept(); System.out.println("Просто подключается к " + server.getRemoteSocketAddress()); DataInputStream in = new DataInputStream(server.getInputStream()); System.out.println(in.readUTF()); DataOutputStream out = new DataOutputStream(server.getOutputStream()); out.writeUTF("Спасибо за подключение к " + server.getLocalSocketAddress() + "\nПока!"); server.close(); >catch (SocketTimeoutException s) < System.out.println("Время сокета истекло!"); break; >catch (IOException e) < e.printStackTrace(); break; >> > public static void main(String [] args) < int port = Integer.parseInt(args[0]); try < Thread t = new GreetingServer(port); t.start(); >catch (IOException e) < e.printStackTrace(); >> > 

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

$ java GreetingServer 6066 Ожидание клиента на порт 6066. 

Проверьте клиентскую программу следующим образом:

$ java GreetingClient localhost 6066 Подключение к localhost на порт 6066 Просто подключается к localhost/127.0.0.1:6066 Сервер ответил Спасибо за подключение к /127.0.0.1:6066 Пока! 

Оглавление

  • 1. Java – Самоучитель для начинающих
  • 2. Java – Обзор языка
  • 3. Java – Установка и настройка
  • 4. Java – Синтаксис
  • 5. Java – Классы и объекты
  • 6. Java – Конструкторы
  • 7. Java – Типы данных и литералы
  • 8. Java – Типы переменных
  • 9. Java – Модификаторы
  • 10. Java – Операторы
  • 11. Java – Циклы и операторы цикла
  • 11.1. Java – Цикл while
  • 11.2. Java – Цикл for
  • 11.3. Java – Улучшенный цикл for
  • 11.4. Java – Цикл do..while
  • 11.5. Java – Оператор break
  • 11.6. Java – Оператор continue
  • 12. Java – Операторы принятия решений
  • 12.1. Java – Оператор if
  • 12.2. Java – Оператор if..else
  • 12.3. Java – Вложенный оператор if
  • 12.4. Java – Оператор switch..case
  • 12.5. Java – Условный оператор (? 🙂
  • 13. Java – Числа
  • 13.1. Java – Методы byteValue(), shortValue(), intValue(), longValue(), floatValue(), doubleValue()
  • 13.2. Java – Метод compareTo()
  • 13.3. Java – Метод equals()
  • 13.4. Java – Метод valueOf()
  • 13.5. Java – Метод toString()
  • 13.6. Java – Метод parseInt()
  • 13.7. Java – Метод Math.abs()
  • 13.8. Java – Метод Math.ceil()
  • 13.9. Java – Метод Math.floor()
  • 13.10. Java – Метод Math.rint()
  • 13.11. Java – Метод Math.round()
  • 13.12. Java – Метод Math.min()
  • 13.13. Java – Метод Math.max()
  • 13.14. Java – Метод Math.exp()
  • 13.15. Java – Метод Math.log()
  • 13.16. Java – Метод Math.pow()
  • 13.17. Java – Метод Math.sqrt()
  • 13.18. Java – Метод Math.sin()
  • 13.19. Java – Метод Math.cos()
  • 13.20. Java – Метод Math.tan()
  • 13.21. Java – Метод Math.asin()
  • 13.22. Java – Метод Math.acos()
  • 13.23. Java – Метод Math.atan()
  • 13.24. Java – Метод Math.atan2()
  • 13.25. Java – Метод Math.toDegrees()
  • 13.26. Java – Метод Math.toRadians()
  • 13.27. Java – Метод Math.random()
  • 14. Java – Символы
  • 14.1. Java – Метод Character.isLetter()
  • 14.2. Java – Метод Character.isDigit()
  • 14.3. Java – Метод Character.isWhitespace()
  • 14.4. Java – Метод Character.isUpperCase()
  • 14.5. Java – Метод Character.isLowerCase()
  • 14.6. Java – Метод Character.toUpperCase()
  • 14.7. Java – Метод Character.toLowerCase()
  • 14.8. Java – Метод Character.toString()
  • 15. Java – Строки
  • 15.1. Java – Метод charAt()
  • 15.2. Java – Метод compareTo()
  • 15.3. Java – Метод compareToIgnoreCase()
  • 15.4. Java – Метод concat()
  • 15.5. Java – Метод contentEquals()
  • 15.6. Java – Метод copyValueOf()
  • 15.7. Java – Метод endsWith()
  • 15.8. Java – Метод equals()
  • 15.9. Java – Метод equalsIgnoreCase()
  • 15.10. Java – Метод getBytes()
  • 15.11. Java – Метод getChars()
  • 15.12. Java – Метод hashCode()
  • 15.13. Java – Метод indexOf()
  • 15.14. Java – Метод intern()
  • 15.15. Java – Метод lastIndexOf()
  • 15.16. Java – Метод length()
  • 15.17. Java – Метод matches()
  • 15.18. Java – Метод regionMatches()
  • 15.19. Java – Метод replace()
  • 15.20. Java – Метод replaceAll()
  • 15.21. Java – Метод replaceFirst()
  • 15.22. Java – Метод split()
  • 15.23. Java – Метод startsWith()
  • 15.24. Java – Метод subSequence()
  • 15.25. Java – Метод substring()
  • 15.26. Java – Метод toCharArray()
  • 15.27. Java – Метод toLowerCase()
  • 15.28. Java – Метод toString()
  • 15.29. Java – Метод toUpperCase()
  • 15.30. Java – Метод trim()
  • 15.31. Java – Метод valueOf()
  • 15.32. Java – Классы StringBuilder и StringBuffer
  • 15.32.1. Java – Метод append()
  • 15.32.2. Java – Метод reverse()
  • 15.32.3. Java – Метод delete()
  • 15.32.4. Java – Метод insert()
  • 15.32.5. Java – Метод replace()
  • 16. Java – Массивы
  • 17. Java – Дата и время
  • 18. Java – Регулярные выражения
  • 19. Java – Методы
  • 20. Java – Потоки ввода/вывода, файлы и каталоги
  • 20.1. Java – Класс ByteArrayInputStream
  • 20.2. Java – Класс DataInputStream
  • 20.3. Java – Класс ByteArrayOutputStream
  • 20.4. Java – Класс DataOutputStream
  • 20.5. Java – Класс File
  • 20.6. Java – Класс FileReader
  • 20.7. Java – Класс FileWriter
  • 21. Java – Исключения
  • 21.1. Java – Встроенные исключения
  • 22. Java – Вложенные и внутренние классы
  • 23. Java – Наследование
  • 24. Java – Переопределение
  • 25. Java – Полиморфизм
  • 26. Java – Абстракция
  • 27. Java – Инкапсуляция
  • 28. Java – Интерфейсы
  • 29. Java – Пакеты
  • 30. Java – Структуры данных
  • 30.1. Java – Интерфейс Enumeration
  • 30.2. Java – Класс BitSet
  • 30.3. Java – Класс Vector
  • 30.4. Java – Класс Stack
  • 30.5. Java – Класс Dictionary
  • 30.6. Java – Класс Hashtable
  • 30.7. Java – Класс Properties
  • 31. Java – Коллекции
  • 31.1. Java – Интерфейс Collection
  • 31.2. Java – Интерфейс List
  • 31.3. Java – Интерфейс Set
  • 31.4. Java – Интерфейс SortedSet
  • 31.5. Java – Интерфейс Map
  • 31.6. Java – Интерфейс Map.Entry
  • 31.7. Java – Интерфейс SortedMap
  • 31.8. Java – Класс LinkedList
  • 31.9. Java – Класс ArrayList
  • 31.10. Java – Класс HashSet
  • 31.11. Java – Класс LinkedHashSet
  • 31.12. Java – Класс TreeSet
  • 31.13. Java – Класс HashMap
  • 31.14. Java – Класс TreeMap
  • 31.15. Java – Класс WeakHashMap
  • 31.16. Java – Класс LinkedHashMap
  • 31.17. Java – Класс IdentityHashMap
  • 31.18. Java – Алгоритмы Collection
  • 31.19. Java – Iterator и ListIterator
  • 31.20. Java – Comparator
  • 32. Java – Дженерики
  • 33. Java – Сериализация
  • 34. Java – Сеть
  • 34.1. Java – Обработка URL
  • 35. Java – Отправка Email
  • 36. Java – Многопоточность
  • 36.1. Java – Синхронизация потоков
  • 36.2. Java – Межпоточная связь
  • 36.3. Java – Взаимная блокировка потоков
  • 36.4. Java – Управление потоками
  • 37. Java – Основы работы с апплетами
  • 38. Java – Javadoc

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

Добрый день. Объясните пожалуйста что такое «сокет» в Java простыми словами. Что ответить если спросят на собеседовании? Для себя я всегда представляю это как поток ввода/вывода куда можно писать и откуда можно читать, верно ли это?
P.S. Аналогии из жизни приветствуются)

  • Вопрос задан более трёх лет назад
  • 7956 просмотров

Комментировать

Решения вопроса 0

Ответы на вопрос 2

Интерфейс обмена данными.
Грубо говоря, ты можешь отправлять данные по протоколу HTTP, а можешь отправлять по сокету, сокет состоит из IP и порта. Для чего это нужно? IP нужен для определение устройства в сети, у каждого устройства есть IP адрес, по которому это устройство доступно. Так вот когда мы нашли устройство по ИП адресу, теперь нам нужно определить клиент, программу, с которой будем обмениваться данными, для этого и нужен порт, порт отвечает за «обнаружние» программы.
Теперь мы можеот отправлять и получать данные на сокет, для этого нужно создать соединения обеих сторон, в отличи от HTTP, данные может отправлять не только клиент, но и сервер.
Это если вкратце.

Ответ написан более трёх лет назад

Нравится 3 4 комментария

Сокеты и Java

Вам захотелось сделать свой чат ? Вы уже поняли, что Вам прийдётся изучить принцып сокетов? Ну тогда смею предложить Вам несколько простых шагов по созданию соединения между компьютерами в интернете по средствам Java. Для начала не забудьте добавить в исходный код вашей программы java.net и java.io пакеты.

Вот три основных этапа создания нашего приложения:

  • Сервер (Tim) — Создаём новый сокет, ожидающий запросы от клиента на 4444 порту.
  • Клиент (Chris) — Создаём новый сокет, который будет коннектиться к Tim на 4444 порт.
  • Начинаем передачу данных между клиентом и сокетом.

Инициализация клиентского сокета выглядит следующим образом:

Socket clientSocket = null; clientSocket = new Socket("Tim", 4444);

Этот сокет коннектится к компьютеру, названному нами Tim на 4444 порт. Обычно вместо названия Tim используют IP адресс этого компьютера. Но перед тем как мы попытаемся установить связь с серверо, необходимо, чтобы сервер ожидал наш запрос на установление связи, для это создади у сервера соке, и переведём его в режим ожидания входящих запросов:

Socket serverSocket = null; serverSocket = new Socket(4444); //Notice no user to connect to this time. serverSocket.accept(); //Accept a client.

Теперь приступим к передаче данных между Клиентом и Сервером.

Задача серверного сокета заключается в том, чтобы за один сеанс связи принять данные от клиента и сразу же передать клиенту ответ. Чтобы произвести такую операцию необходимо объявить потоки PrintWriter для вывода и поток BufferedReader для ввода. Причём объявить потоки необходимо как на сервере, так и на клиенте. Дла простототы я покажу как это делается на клиете:

PrintWriter out = null; BufferedReader in = null; Socket clientSocket = null; clientSocket = new Socket("Tim", 4444); //get the socket's ouput out=new PrintWriter(clientSocket.getOutputStream(), true); //get the socket's input in=new BufferedReader(new inputStreamReader(clientSocket.getInputStream()));

Наверное я переусердствовал с цветами 🙂 Теперь PrintWriter out будет выходным потоком, при записи в который, данные будут направляться в сокет. Если теперь выполнить out.println(«Hello»), то строка hello будет отправлена серверу. Ну и в конце осталось посмотреть как сделать, чтобы приём информации на сервере шёл непрерывно:

PrintWriter out = null; BufferedReader in = null; Socket clientSocket = null; String fromServer; clientSocket = new Socket("Tim", 4444); out = new PrintWriter(clientSocket.getOutputStream(), true); in = new BufferedReader(new inputStreamReader( clientSocket.getInputStream())); // Цикл до тех пор, пока есть поступающие сообщения while ((fromServer = in.readLine()) != null) < //Отображаем полученное сообщение System.out.println("Server: " + fromServer); >out.close(); in.close(); clientSocket.close();

Я уверен, что найдётся много людей, которые не поймут эту статью. Но если вы прочитали и не поняли как сделать простой чат, то вероятно вам потребуется ещё раз прочитать руководство для начинающих :).

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

Клиент-серверная архитектура — наиболее распространенная структура приложений в Интернете. В этой архитектуре клиенты (т.е. персональные компьютеры, устройства Интернета вещей и т. д.) сначала запрашивают ресурсы с сервера. Затем сервер отправляет обратно соответствующие ответы на запросы клиентов. Чтобы это произошло, должен быть какой-то механизм, реализованный как на стороне клиента, так и на стороне сервера, который поддерживает эту сетевую транзакцию. Этот механизм называется коммуникацией посредством сокетов.

Почти каждое приложение, которое полагается на сетевые операции, такие как извлечение данных с удаленных серверов и загрузка файлов на сервер, широко использует сокеты “под капотом”. Несколько примеров таких приложений — браузеры, чат-приложения и одноранговые сетевые приложения.

В этой статье мы более подробно рассмотрим сокеты и простую клиент-серверную реализацию с использованием сокетов в Java.

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

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

Сокет — это программная (логическая) конечная точка, устанавливающая двунаправленную коммуникацию между сервером и одной или несколькими клиентскими программами. Сокет — это нечто “программное”. Другими словами, сокет не существует на физическом уровне. Прикладное программное обеспечение определяет сокет так, чтобы он использовал порты на основном компьютере для его реализации. Это позволяет программистам комфортно работать с низкоуровневыми деталями сетевых коммуникаций, такими как порты, маршрутизация и т. д., внутри прикладного кода.

Как работают сокеты?

TCP-сокет устанавливает связь между клиентом и сервером в несколько этапов.

  • Socket() — на сервере создается конечная точка для коммуникации.
  • Bind() — сокету присваивается уникальный номер и для него резервируется уникальная комбинации IP-адреса и порта.
  • Listen() — после создания сокета сервер ожидает подключения клиента.
  • Accept() — сервер получает запрос на подключение от клиентского сокета.
  • Connect() — клиент и сервер соединены друг с другом.
  • Send()/Recieve() — обмен данными между клиентом и сервером.
  • Close() — после обмена данными сервер и клиент разрывают соединение.

На каждой из перечисленных выше стадий коммуникации сокетов “под капотом» происходит много всего сложного. Однако этих знаний вполне достаточно для понимания и демонстрации того, как работает коммуникация посредством TCP-сокетов.

К настоящему времени мы уже достаточно знаем о TCP-сокетах. Давайте теперь посмотрим на них в действии.

Реализация коммуникации посредством TCP-сокетов в Java

Давайте посмотрим, как мы можем реализовать коммуникацию сокетов в Java. Мы сейчас напишем две Java-программы. Одной будет программа, запущенная на сервере, а другой — клиентская программа, которая будет взаимодействовать с сервером.

Реализация серверного сокета

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketServer
public static final int SERVER_PORT = 50001;

public static void main (String[] args)
try ServerSocket server = new ServerSocket(SERVER_PORT);
Socket clientConn = server.accept();
DataOutputStream serverOutput = new DataOutputStream(clientConn.getOutputStream());
serverOutput.writeBytes("Java revisited\n");
clientConn.close();
>
catch (IOException e) e.printStackTrace();
>

>

>

В приведенной выше программе сервер открывает сокет с порта 50001 на серверной машине и ожидает клиента на server.accept() . После подключения клиента создается экземпляр выходного потока. Это может быть использовано для отправки данных с сервера на подключенный клиент. Именно это и делает serverOutput.writeBytes() . После отправки данных соединение с клиентом завершается.

Теперь давайте создадим клиент для взаимодействия с серверным сокетом, созданным выше.

Реализация клиентского сокета

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;

public class SocketClient public static void main(String[] args) try Socket clientSocket = new Socket ("localhost",50001);
InputStream is = clientSocket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String receivedData = br.readLine();
System.out.println("Received Data: "+receivedData);
>
catch (Exception e) e.printStackTrace();
>
>
>

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

Запуск программ

Сначала запустите серверную Java-программу, а затем клиентскую Java-программу (потому что сервер уже должен работать для подключения клиента). Вы увидите Received data: Java Revisited в терминале, где работает клиентская программа. Вот что здесь произошло: серверная программа отправила данные клиенту по запросу, а клиентская программа вывела их на терминал.

В этой статье мы обсудили, что такое сокеты и Java-реализация связи TCP-сокетов.

Спасибо за чтение.

  • Кто на свете всех сильнее — Java, Go и Rust в сравнении
  • Java-Lombok: нужны ли геттеры и сеттеры?
  • Топ — 9 фреймворков Java в 2020 году

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *