C# SDK для HP-Socket (https://github.com/ldcsaa/HP-Socket).
HPSocket.Net устанавливается через NuGet. В консоли Package Manager используйте команду:
Install-Package HPSocket.Net
Или в Visual Studio в контекстном меню проекта выберите «Управление пакетами NuGet» → «Обзор». В поле поиска введите HPSocket.Net и установите пакет.
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).
ITcpPortForwarding — компонент для переадресации TCP-порта. Для переадресации достаточно 10 строк кода.
HPSocket.Net предоставляет 6 компонентов Easy и 2 компонента WebSocket для упрощённой обработки данных пакетов http/https/ws. В базовых компонентах http необходимо самостоятельно реализовать получение полного пакета данных. Компоненты Easy обрабатывают пакеты данных, и при возникновении события можно получить полный пакет данных:
WebSocket также можно использовать напрямую с помощью следующих двух компонентов:
AsyncQueue взят из qq:842352715.
// Создание экземпляра HttpEasyServer
using(IHttpEasyServer httpServer = new HttpEasyServer())
{
// ...другие настройки
// Привязка события OnEasyMessageData
httpServer.OnEasyMessageData += (sender, id, data) =>
{
// Параметр data всегда является полным пакетом данных
// ...обработка data
return HttpParseResult.Ok;
};
}
// Создание экземпляра HttpEasyAgent
using(IHttpEasyAgent httpAgent = new HttpEasyAgent())
{
// ...другие настройки
// Привязка события OnEasyMessageData
httpAgent.OnEasyMessageData += (sender, id, data) =>
{
// Параметр data всегда является полным пакетом данных
// ...обработка data
return HttpParseResult.Ok;
};
}
// Создание экземпляра 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, но они более гибкие и просты в адаптации.
ТерминаторДатаРесивАдаптер<строка>
{
/// <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);
}
}
}
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.