Библиотека для создания простого клиент-серверного приложения. Эта библиотека решает такую проблему как отправка больших пакетов, путем использования своего протокола передачи данных (работает поверх TCP). Большинство библиотек которые есть в интернете для работы с TCP, ни на что кроме создания чата не пригодны в большинстве своем. EasyTCP способно передавать большие объемы данных (один пакет размером в 2 гб (2130702268 байт примерно)), производить сериализацию классов и передачу их.
Протокол EasyTCP работает поверх TCP что обеспечивает целостность доставки данных. Позволяет передавать с помощью 1 пакета данные объемом ~ 2 ГБайта (2147483647 Байт).
Примечание: на уровне приложения можно передавать до 2 гб, но на более низком уровне, пакет будет фрагментироваться на более маленькие. Это необходимо учитывать если вы хотите построить максимально производительную систему.
Структура заголовка пакета EasyTCP. Общая длина заголовка 13 байт.
1 - 8 Байт | |||||||
Version (1 Байт) | DataSize (4 Байта) | UID (4 Байта) | |||||
UID (перенос) | Mode (1 Байт) | Type (1 Байт) | TypePacket (2 Байта) | ||||
Данные (0 - 2147483647 Байт) |
Описание параметров заголовка EasyTCP.
Параметры | Размер (Байт) | Описание |
---|---|---|
Version | 1 | Версия протокола EasyTCP |
DataSize | 4 | Длина данных после заголовка |
UID | 4 | Уникальный идентификатор для обработки ожидаемых пакетов. |
Mode | 1 | Hidden (0) - не уведомляет клиента о количестве считанных байт из отправленного клиентом пакета. Info (1) - уведомляет клиента о количестве считанных байт из отправленного клиентом пакета Не используется, является запасным. |
Type | 1 | Тип пакета который передается. Все служебные пакеты начинаются с 1 по 6, 0 - передача клиентского пакета |
TypePacket | 2 | Указывает что это за пакет для PacketEntityManager, 0 - зарезервирован для не определенного пакета. |
Общая длина заголовка пакета | 13 |
Объяснения функционала (может быть не точным, из за внесения изменений в функции).
Подключение к серверу
public bool Connect(string host, int port, ISerialization serialization = null)
Закрытие подключения
public void Close()
Передается сертификат и можно указать проверять или нет данный сертификат.
public void EnableSsl(X509Certificate certificate, bool IsValidateCertificate)
Отправляет пакет на сервер и не ждет ответа.
public void Send(object obj)
Отправляет пакет и ждет ответ от сервера.
public T SendAndWaitResponse<T>(object obj, int timeout = int.MaxValue)
Отправляет пакет и получает ответ от сервера о том сколько байт он считал с этого пакета, и после когда сервер отправляет ответ, так же уведомляет сколько прочитал.
Не актуально на данный момент. !!!Увеличивает накладные расходы, чтобы их уменьшить увеличьте данный параметр у сервера BlockSizeForSendInfoReceive (его можно и у клиента задать)!!!
public IEnumerable<ResponseInfo<T>> SendAndReceiveInfo<T>(T obj, int timeout = int.MaxValue)