Взаимодействие по протоколу TCP
TCP (Transmission Control Protocol) — это один из основных протоколов сетевого уровня, обеспечивающий надежную передачу данных между приложениями в сети. TCP гарантирует доставку сообщений в правильном порядке, выполняет проверку целостности данных и автоматически восстанавливает потерянные пакеты. Этот протокол имеет широкую область применения, включающую сетевые приложения (в том числе веб-сервисы), электронную почту, передачу файлов и удаленный доступ.
Для работы с сетевыми соединениями по протоколу TCP используйте следующие типы:
СоединениеTcp— позволяет устанавливать клиентские TCP-соединения для взаимодействия с различными сетевыми сервисами (HTTP, FTP, SMTP, SSH и другими).ВходящееСоединениеTcp— представляет входящее TCP-соединение, принятое сервером.БлокирующийСерверTcp— реализует TCP-сервер для прослушивания входящих соединений и обмена данными. Может являться основной для реализации FTP-, HTTP-, SSH-серверов, а также произвольных протоколов на базе TCP.ИсключениеTcp— исключение, которое выбрасывается при возникновении ошибки во время работы с TCP.ИсключениеТаймаутаTcp— исключение, которое выбрасывается при превышении времени ожидания при работе с TCP.
Пример
Реализация TCP эхо-сервера
В данном примере показано создание простого эхо-сервера, который принимает входящее соединение от клиента, получает отправленные данные и возвращает их обратно без изменений.
метод ЭхоСервер()
знч Разделитель = "\n"
// Создание TCP эхо-сервера
исп Сервер = новый БлокирующийСерверTcp(Адрес = "127.0.0.1", Порт = 5000)
// Ожидание входящего соединения
исп Соединение = Сервер.ОжидатьСоединения(30с)
// Получение данных от клиента
знч ЧтениеДанных = новый ЧтениеДанных(Соединение.ПолучитьПотокЧтения())
знч Сообщение = ЧтениеДанных.ПрочитатьСтроку(РазделительСтрок = Разделитель)
// Возврат данных клиенту
исп ПотокЗаписи = Соединение.ПолучитьПотокЗаписи()
ПотокЗаписи.Записать(Сообщение + Разделитель)
ПотокЗаписи.СброситьБуферы()
;
метод КлиентЭхоСервера()
знч Разделитель = "\n"
// Подключение к эхо-серверу по TCP
исп Соединение = новый СоединениеTcp(Адрес = "127.0.0.1", Порт = 5000)
знч ЧтениеДанных = новый ЧтениеДанных(Соединение.ПолучитьПотокЧтения())
// Отправка данных на сервер
исп ПотокЗаписи = Соединение.ПолучитьПотокЗаписи()
ПотокЗаписи.Записать("Hello" + Разделитель, Кодировка.Utf8)
ПотокЗаписи.СброситьБуферы()
// Получение ответа от сервера
знч Сообщение = ЧтениеДанных.ПрочитатьСтроку(Кодировка.Utf8, Разделитель) // Получено "Hello"
Консоль.Записать("Получено: %Сообщение")
;
Вы можете модифицировать вышеприведенный пример для создания эхо-сервера, который обрабатывает запросы от нескольких клиентов, используя один поток выполнения. Работа с каждым следующим клиентом начинается только после завершения обслуживания предыдущего.
метод МногоклиентскийЭхоСервер()
знч Разделитель = "\n"
// Создание TCP эхо-сервера
исп Сервер = новый БлокирующийСерверTcp(Адрес = "127.0.0.1", Порт = 5000)
// Последовательное ожидание клиентов
пока Истина
// Ожидание входящего соединения
исп Соединение = Сервер.ОжидатьСоединения(30с)
знч АдресКлиента = Соединение.ВСтроку()
Консоль.Записать("Подключен новый клиент: %АдресКлиента")
// Получение данных от клиента
знч ЧтениеДанных = новый ЧтениеДанных(Соединение.ПолучитьПотокЧтения())
знч Сообщение = ЧтениеДанных.ПрочитатьСтроку(РазделительСтрок = Разделитель)
// Возврат данных клиенту
исп ПотокЗаписи = Соединение.ПолучитьПотокЗаписи()
ПотокЗаписи.Записать(Сообщение + Разделитель)
ПотокЗаписи.СброситьБуферы()
Консоль.Записать("Клиент \"%АдресКлиента\" будет отключен")
Соединение.Закрыть()
;
;