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

OSCHINA-MIRROR/stoneson-DotNettySocket

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Содержание

Введение

DotNettySocket — это кросс-платформенный фреймворк для работы с сокетами на платформе .NET (поддерживает .NET4.5+ и .NET Standard2.0+), который поддерживает TcpSocket, WebSocket и UdpSocket. Фреймворк основан на мощном DotNetty от Microsoft и стремится обеспечить простоту, эффективность и элегантность работы с сокетами.

Способ установки: установка через Nuget DotNettySocket

Адрес проекта: https://github.com/Coldairarrow/DotNettySocket# Обстоятельства появления Два года назад, когда я впервые столкнулся с Интернетом вещей, мне требовались TCP и UDP для связи. Чтобы облегчить использование, я создал простое обертывание для исходных сокетов, что удовлетворило основные требования. Затем я открыл этот фреймворк для общественности. Однако из-за ограниченных возможностей и времени, я не смог оптимизировать его дальше. Позже я обнаружил мощный DotNetty, который является открытым исходным кодом от команды Microsoft Azure, основан на Java Netty и имеет отличные характеристики и мощную команду поддержки. DotNetty очень мощен, но его использование не всегда простое (может быть, это мое личное мнение). В последнее время проект требовал WebSocket, поэтому я нашел время, чтобы создать простое обертывание на основе DotNetty, и создал фреймворк, который стремится быть простым, эффективным и элегантным.# Способы использования## TcpSocket Tcp — это протокол передачи данных, поэтому управление соединениями на стороне сервера является ключевым моментом. Фреймворк поддерживает обработку различных событий, установку идентификатора соединения, поиск определенного соединения по имени, отправку и получение данных, разделение пакетов и обработку прилипания пакетов.

  • Сервер
using Coldairarrow.DotNettySocket;
using System;
using System.Text;
using System.Threading.Tasks;
using System;namespace TcpSocket.Server
{
    class Program
    {
        static async Task Main(string[] args)
        {
            var theServer = await SocketBuilderFactory.GetTcpSocketServerBuilder(6001)
                .SetLengthFieldEncoder(2)
                .SetLengthFieldDecoder(ushort.MaxValue, 0, 2, 0, 2)
                .OnConnectionClose((server, connection) =>
                {
                    Console.WriteLine($"Соединение закрыто, имя соединения [{connection.ConnectionName}], текущее количество соединений: {server.GetConnectionCount()}");
                })
                .OnException(ex =>
                {
                    Console.WriteLine($"Исключение на сервере: {ex.Message}");
                })
                .OnNewConnection((server, connection) =>
                {
                    connection.ConnectionName = $"Имя{connection.ConnectionId}";
                    Console.WriteLine($"Новое соединение: {connection.ConnectionName}, текущее количество соединений: {server.GetConnectionCount()}");
                })
                .OnRecieve((server, connection, bytes) =>
                {
                    Console.WriteLine($"Сервер: данные {Encoding.UTF8.GetString(bytes)}");
                    connection.Send(bytes);
                })
                .OnSend((server, connection, bytes) =>
                {
                    Console.WriteLine($"Данные отправлены соединению с именем [{connection.ConnectionName}]: {Encoding.UTF8.GetString(bytes)}");
                })
                .```csharp
OnServerStarted(server =>
                 {
                     Console.WriteLine($"Сервер запущен");
                 }).BuildAsync();
         }
     }
 }```md
## WebSocket
WebSocket интерфейс аналогичен TcpSocket, за исключением того, что TcpSocket поддерживает отправку и получение байтов, а также требует ручной обработки фрагментации и слияния пакетов. В то время как WebSocket работает с строками (кодировка UTF-8) без необходимости учитывать фрагментацию и слияние пакетов. В текущей версии фреймворка не поддерживается WSS, рекомендуется использовать Nginx для перенаправления (документация легко доступна в интернете).
- Сервер
```csharp
using Coldairarrow.DotNettySocket;
using System;
using System.Threading.Tasks;
```namespace WebSocket.Server
{
    class Program
    {
        static async Task Main(string[] args)
        {
            var theServer = await SocketBuilderFactory.GetWebSocketServerBuilder(6002)
                .OnConnectionClose((server, connection) =>
                {
                    Console.WriteLine($"Соединение закрыто, имя соединения [{connection.ConnectionName}], текущее количество соединений: {server.GetConnectionCount()}");
                })
                .OnException(ex =>
                {
                    Console.WriteLine($"Исключение на сервере: {ex.Message}");
                })
                .OnNewConnection((server, connection) =>
                {
                    connection.ConnectionName = $"Имя {connection.ConnectionId}";
                    Console.WriteLine($"Новое соединение: {connection.ConnectionName}, текущее количество соединений: {server.GetConnectionCount()}");
                })
                .OnRecieve((server, connection, msg) =>
                {
                    Console.WriteLine($"Сервер: данные {msg}");
                    connection.Send(msg);
                })
                .OnSend((server, connection, msg) =>
                {
``````markdown
## Клиентская консоль
```c#
using Coldairarrow.DotNettySocket;
using System;
using System.Threading.Tasks;

namespace Coldairarrow.DotNettySocket
{
    public class ClientConsole
    {
        public async Task RunAsync()
        {
            var builder = new ServerBuilder();

            builder
                .OnConnectionEstablished(connection =>
                {
                    Console.WriteLine($"Отправка данных соединению с именем [{connection.ConnectionName}]: {msg}");
                })
                .OnServerStarted(server =>
                {
                    Console.WriteLine($"Сервер запущен");
                })
                .BuildAsync();
        }
    }
}
```namespace WebSocket.ConsoleClient
{
    class Program
    {
        static async Task Main(string[] args)
        {
            var theClient = await SocketBuilderFactory.GetWebSocketClientBuilder("127.0.0.1", 6002)
                .OnClientStarted(client =>
                {
                    Console.WriteLine($"Клиент запущен");
                })
                .OnClientClose(client =>
                {
                    Console.WriteLine($"Клиент закрыт");
                })
                .OnException(ex =>
                {
                    Console.WriteLine($"Ошибка: {ex.Message}");
                })
                .OnReceive((client, msg) =>
                {
                    Console.WriteLine($"Клиент: полученное сообщение: {msg}");
                })
                .OnSend((client, msg) =>
                {
                    Console.WriteLine($"Клиент: отправленное сообщение: {msg}");
                })
                .BuildAsync();

            while (true)
            {
                await theClient.Send(Guid.NewGuid().ToString());

                await Task.Delay(1000);
            }
        }
    }
}

Веб-клиент

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>

    <script type="text/javascript">
        function WebSocketTest() {
            if ("WebSocket" in window) {
                var ws = new WebSocket("ws://127.0.0.1:6002");

                ws.onopen = function () {
                    console.log('Подключено к серверу');
                    setInterval(function () {
                        ws.send("111111");
                    }, 1000);
                };

                ws.onmessage = function (evt) {
                    var received_msg = evt.data;
                    console.log('Получено: ' + received_msg);
                };

                ws.onclose = function () {
                    console.log("Соединение закрыто...");
                };
            } else {
                console.log('Ваш браузер не поддерживает WebSocket');
            }
        }
    </script>
</head>
<body onload="WebSocketTest()">
</body>
</html>
```            else {
                alert("Ваш браузер не поддерживает WebSocket!");
            }
        }
    </script>
```</head>
<body>
    <div id="sse">
        <a href="javascript:WebSocketTest()">Запустить WebSocket</a>
    </div>
</body>
</html>

UdpSocket

Udp по своей природе является одновременно отправителем и получателем, разделение на сервер и клиент только для удобства понимания.

  • Сервер
using Coldairarrow.DotNettySocket;
using System;
using System.Text;
using System.Threading.Tasks;
```namespace UdpSocket.Server
{
    class Program
    {
        static async Task Main(string[] args)
        {
            var theServer = await SocketBuilderFactory.GetUdpSocketBuilder(6003)
                .OnClose(server =>
                {
                    Console.WriteLine($"Server closed");
                })
                .OnException(ex =>
                {
                    Console.WriteLine($"Server error:{ex.Message}");
                })
                .OnRecieve((server, point, bytes) =>
                {
                    Console.WriteLine($"Server: received message from [{point.ToString()}]:{Encoding.UTF8.GetString(bytes)}");
                    server.Send(bytes, point);
                })
                .OnSend((server, point, bytes) =>
                {
                    Console.WriteLine($"Server sent data: target [{point.ToString()}]:{Encoding.UTF8.GetString(bytes)}");
                })
                .OnStarted(server =>
                {
                    Console.WriteLine($"Server started");
                }).BuildAsync();

            Console.ReadLine();
        }
    }
}```c#
using Coldairarrow.DotNettySocket;
using System;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace UdpSocket.Client
{
    class Program
    {
        static async Task Main(string[] args)
        {
            var theClient = await SocketBuilderFactory.GetUdpSocketBuilder()
                .OnClose(server =>
                {
                    Console.WriteLine($"Клиент закрыт");
                })
                .OnException(ex =>
                {
                    Console.WriteLine($"Клиент异常:{ex.Message}");
                })
                .OnRecieve((server, point, bytes) =>
                {
                    Console.WriteLine($"Клиент: получено сообщение от [{point.ToString()}]: {Encoding.UTF8.GetString(bytes)}");
                })
                .OnSend((server, point, bytes) =>
                {
                    Console.WriteLine($"Клиент отправил данные: цель [{point.ToString()}]: {Encoding.UTF8.GetString(bytes)}");
                })
                .OnStarted(server =>
                {
                    Console.WriteLine($"Клиент запущен");
                }).BuildAsync();
        }
    }
}

            while (true)
            {
                await theClient.Send(Guid.NewGuid().ToString(), new IPEndPoint(IPAddress.Parse("127.0.0.1"), 6003));
                await Task.Delay(1000);
            }
        }
    }
}

Заключение

Все приведенные выше примеры находятся в исходном коде. Если вам понравилось, пожалуйста, поставьте лайк и звезды. Надеюсь, это поможет вам.

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

QQ-группа 1: (полна)

QQ-группа 2: 579202910


Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

DotNettySocket — это кроссплатформенный Socket-фреймворк для .NET (поддерживает .NET4.5+ и .NET Standard2.0+), который одновременно поддерживает TcpSocket, WebSocket и UdpSocket. Он основан на мощном фреймворке DotNetty от Microsoft и стремится обеспечить простой, эффективный и элегантный способ работы с Socket-соединениями. Развернуть Свернуть
C#
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/stoneson-DotNettySocket.git
git@api.gitlife.ru:oschina-mirror/stoneson-DotNettySocket.git
oschina-mirror
stoneson-DotNettySocket
stoneson-DotNettySocket
master