1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/int2e-HPSocket.Net

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README_zh.md 11 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 02.12.2024 08:53 341277d

HPSocket.Net

Обзор

C# SDK для HP-Socket (https://github.com/ldcsaa/HP-Socket).

Поддержка .Net Framework

  • .Net Framework 2.0+;
  • .Net Core 2.0+;
  • .Net 5.0;
  • .Net 6.0.

Платформа

  • Windows 7+ x86/x64;
  • Linux kernel 2.6.32+ x86/x64;
  • mac OS 10.12+ x64.

Установка

HPSocket.Net устанавливается через NuGet. В консоли Package Manager используйте команду:

Install-Package HPSocket.Net

Или в Visual Studio в контекстном меню проекта выберите «Управление пакетами NuGet» → «Обзор». В поле поиска введите HPSocket.Net и установите пакет.

macOS

HPSocket.Net поддерживает разработку на .net core2.0+.

В пакете NuGet есть libhpsocket4c.dylib, скомпилированный из macOS ветки HP-Socket-for-macOS (https://gitee.com/xin_chong/HP-Socket-for-macOS).

Компоненты

Базовые компоненты

Это исходные компоненты, предоставляемые HP-Socket. Дополнительные сведения см. в документации HP-Socket (https://github.com/ldcsaa/HP-Socket/tree/master/Doc).

TCP
  • ITcpServer;
  • ITcpAgent;
  • ITcpClient;
  • ITcpPullServer;
  • ITcpPullAgent;
  • ITcpPullClient;
  • ITcpPackServer;
  • ITcpPackAgent;
  • ITcpPackClient.
UDP
  • IUdpServer;
  • IUdpClient;
  • IUdpCast;
  • IUdpArqServer;
  • IUdpArqClient;
  • IUdpNode.
SSL
  • ISslServer;
  • ISllAgent;
  • ISslClient;
  • ISslPullServer;
  • ISslPullAgent;
  • ISslPullClient;
  • ISslPackServer;
  • ISslPackAgent;
  • ISslPackClient.
HTTP
  • IHttpServer;
  • IHttpsServer;
  • IHttpAgent;
  • IHttpsAgent;
  • IHttpClient;
  • IHttpsClient;
  • IHttpRequestSyncClient;
  • IHttpResponseSyncClient.

ThreadPool

  • ThreadPool.

Расширенные компоненты

  • ITcpPortForwarding;
  • IHttpEasyServer;
  • IHttpsEasyServer;
  • IHttpEasyAgent;
  • IHttpsEasyAgent;
  • IHttpEasyClient;
  • IHttpsEasyClient;
  • IWebSocketServer;
  • IWebSocketAgent;
  • ITcpServer;
  • ITcpClient;
  • ITcpAgent;
  • ISslServer;
  • ISslClient;
  • ISslAgent;
  • AsyncQueue.

ITcpPortForwarding — компонент для переадресации TCP-порта. Для переадресации достаточно 10 строк кода.

HPSocket.Net предоставляет 6 компонентов Easy и 2 компонента WebSocket для упрощённой обработки данных пакетов http/https/ws. В базовых компонентах http необходимо самостоятельно реализовать получение полного пакета данных. Компоненты Easy обрабатывают пакеты данных, и при возникновении события можно получить полный пакет данных:

  • OnEasyChunkData — событие полного пакета данных CHUNK сообщения http;
  • OnEasyMessageData — событие полного пакета данных http GET или POST;
  • OnEasyWebSocketMessageData — событие полного пакета данных WebSocket сообщения.

WebSocket также можно использовать напрямую с помощью следующих двух компонентов:

  • IWebSocketServer — сервер WebSocket;
  • IWebSocketAgent — клиент WebSocket. (В отличие от других компонентов Agent, клиент WebSocket не может подключаться к разным серверам WebSocket, то есть все подключения клиента WebSocket могут быть только к одному серверу.)

AsyncQueue взят из qq:842352715.

Использование

  1. Большинство методов использования компонентов см. в каталоге demo.
  2. Все компоненты Agent серии, кроме Pack, включая ITcpPortForwarding, поддерживают настройку прокси http или socks5. Настройка выполняется в виде списка IProxy. Можно одновременно настроить несколько прокси, компоненты будут выбирать их случайным образом. Также можно смешивать использование http и socks5 прокси. См. настройки каждого компонента Agent.

Пример привязки событий расширенных компонентов Easy

IHttpEasyServer

// Создание экземпляра HttpEasyServer
using(IHttpEasyServer httpServer = new HttpEasyServer())
{
    // ...другие настройки

    // Привязка события OnEasyMessageData
    httpServer.OnEasyMessageData += (sender, id, data) => 
    {
        // Параметр data всегда является полным пакетом данных
        // ...обработка data

        return HttpParseResult.Ok;
    };
}

IHttpEasyAgent

// Создание экземпляра HttpEasyAgent
using(IHttpEasyAgent httpAgent = new HttpEasyAgent())
{
    // ...другие настройки

    // Привязка события OnEasyMessageData
    httpAgent.OnEasyMessageData += (sender, id, data) => 
    {
        // Параметр data всегда является полным пакетом данных
        // ...обработка data

        return HttpParseResult.Ok;
    };
}

IHttpEasyClient

// Создание экземпляра HttpEasyClient
using(IHttpEasyClient httpClient = new HttpEasyClient())
{
    // ...другие настройки

    // Привязка события OnEasyMessageData
    httpClient.OnEasyMessageData += (sender, data) => 
    {
        // Параметр data всегда является полным пакетом данных
        // ...обработка data

        return HttpParseResult.Ok;
    };
}

Адаптеры для приёма данных

Полные примеры находятся в demo/TcpServer-TestEcho-Adapter.

Эта серия компонентов представляет собой расширение адаптеров для приёма данных HPSocket.Net. Пользователи могут обрабатывать возможные проблемы прикладного уровня, такие как «наложение» и «полупакет», возникающие при TCP-коммуникации, с помощью пользовательских адаптеров приёма данных. Адаптеры приёма данных выглядят похоже на Pack-компоненты HP-Socket, но они более гибкие и просты в адаптации.

  • ITcpServer/ITcpClient/ITcpAgent
  • ISslServer/ISslClient/ISllAgent. TerminatorDataReceiveAdapter
ТерминаторДатаРесивАдаптер<строка>
{
    /// <summary>
    /// Вызов родительского конструктора, указание признака конца
    /// </summary>
    public TextDataReceiveAdapter()
        : base(
            терминатор: Encoding.UTF8.GetBytes("\r\n") // Указание признака конца как \r\n, то есть каждая строка данных заканчивается на \r\n. Обратите внимание на проблему с кодировкой, обе стороны должны быть согласованы
            )
    {
    }

    /// <summary>
    /// Разбор тела запроса
    /// <remarks>Подкласс должен переопределить этот метод</remarks>
    /// </summary>
    /// <param name="data">Данные, обработанные родительским классом и не содержащие признака конца</param>
    /// <returns></returns>
    protected override string ParseRequestBody(byte[] data)
    {
        // Преобразование в объект запроса, обратите внимание на проблему с кодировкой символов, обе стороны должны быть согласованными
        return Encoding.UTF8.GetString(data);
    }
}

BetweenAndDataReceiveAdapter

МеждуИДатаРесивАдаптер — это адаптер для данных, где заголовок и хвост пакета обозначены специальными символами.

Пример: данные начинаются с определённого символа и заканчиваются другим символом.

##hello world!## // ## начало, ## конец

или

##hello world!|| // ## начало, || конец

или

**hello world!|##| // ** начало, |##| конец

BetweenAndDataReceiveAdapter разработан специально для этой структуры.

using System.Text;
using HPSocket.Adapter;

namespace TcpServerTestEchoAdapter.DataReceiveAdapter
{
    /// <summary>
    /// Адаптер для приёма данных по интервалам
    /// </summary>
    public class ХедТайлДатаРесивАдаптер : БеТвинЭнДатаРесивАдаптер<строка>
    {
        /// <summary>
        /// Вызов родительского конструктора, указание начала и конца интервала
        /// </summary>
        public ХедТайлДатаРесивАдаптер() 
            : base( // Например, формат данных "#*123456*#", где начинается с #*, заканчивается *#, а 123456 — реальные данные
                старт: Encoding.UTF8.GetBytes("#*"), // Начало интервала, здесь начинается с #*
                конец: Encoding.UTF8.GetBytes("*#")  // Конец интервала, здесь заканчивается *#
                )
        {
        }

        /// <summary>
        /// Разбор тела запроса
        /// <remarks>Подкласс должен переопределить этот метод</remarks>
        /// </summary>
        /// <param name="data">Данные, уже обработанные родительским классом и не содержащие начального идентификатора</param>
        /// <returns></returns>
        protected override string ParseRequestBody(byte[] data)
        {
            // Преобразовать в объект запроса, обратить внимание на проблему с кодировкой символов, обе стороны должны быть согласованы
            return Encoding.UTF8.GetString(data);
        }
    }
}
1
https://api.gitlife.ru/oschina-mirror/int2e-HPSocket.Net.git
git@api.gitlife.ru:oschina-mirror/int2e-HPSocket.Net.git
oschina-mirror
int2e-HPSocket.Net
int2e-HPSocket.Net
develop