• .NET6 supersocket 全双工发送和接收消息


    supersocket官网

    设想

    1. 建立一个控制台程序Console1, 启动一个socket server
    2. 再建立一个控制台程序Console2, 同样启动一个socket server
    3. 由于我想实现一个全双工的案例, 于是两边就不分"主次"了, 都不断地监听消息 和 发送消息.
    4. 只要接收到消息, 就输出在控制台; 同时立马发一条消息出去.
    5. 如此则生生不息永无止境也.

    实现

    就是两个控制台项目, 都是.NET6环境, 都依赖了当前最新的 superSocket版本, 即如下图所示的
    在这里插入图片描述
    在这里插入图片描述
    在Visual Studio的包管理控制台中输入如下命令即可:
    Install-Package SuperSocket -Version 2.0.0-beta.11
    如下图.
    在这里插入图片描述

    代码部分

    依赖

    在这里插入图片描述

    Console1

    这里明显用到了supersocket官网示例文档的代码
    官方文档

    不过补充一下, 这个官方文档有点小问题, 不能完全照搬, 有一点点小调整.
    对比一下就知道了.

    // See https://aka.ms/new-console-template for more information
    
    
    using Microsoft.Extensions.Hosting;
    using SuperSocket;
    using SuperSocket.ProtoBase;
    using System.Text;
    
    internal class Program
    {
        private static async Task Main(string[] args)
        {
            var host = SuperSocketHostBuilder
                   .Create()
                   .UsePackageHandler(async (session, package) =>
                   {
                       var result = 0;
    
                       string? v = package.Key.ToString();
                       Console.WriteLine($"svr1 接收: {v}");
    
                       string v1 = $"sv1 发送: {v}";
                       Console.WriteLine(v1);
                       await session.SendAsync(Encoding.UTF8.GetBytes(v1));
                   })
    
                   //.ConfigureLogging((hostCtx, loggingBuilder) =>
                   // {
                   //     loggingBuilder.AddConsole();
                   // })
                   .ConfigureSuperSocket(options =>
                    {
                        options.Name = "Echo Server";
                        options.Listeners = new List() {
                       new ListenOptions
                            {
                                Ip = "Any",
                                Port = 40410
                            }
                      };
                    })
                   .Build();
    
    
            await host.RunAsync();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    Console2

    没有使用supersocket, 是简单地发送和接收

    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    
    
    namespace ConsoleApp2
    {
        internal class Program2
        {
            static void Main(string[] args)
            {
    
                byte[] arr = new byte[1024];
    
                //1.创建socket对象
                Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
           
    
                IPAddress address = IPAddress.Parse("127.0.0.1");
                int port = 40410;
                socket.Connect(address, port);
    
                while (true) {
                    string v = Guid.NewGuid().ToString() + "\r\n";
    
                    byte[] bytes = Encoding.UTF8.GetBytes(v);
    
                    socket.Send(bytes);
    
                    
                    Console.WriteLine($"svr2 输出:{v}");
    
                    Thread.Sleep(100);
    
    
                    //接收
                    socket.Receive(arr);
                    string v2 = Encoding.UTF8.GetString(arr);
                    Console.WriteLine($"svr2 收到:{v2}");
    
                }
    
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    效果

    C# socket全双工通信示例

  • 相关阅读:
    ICE安全插件配置实操
    Allegro基本规则设置指导书之Spacing规则设置
    活动预告|“构建新安全格局”专家研讨会即将开幕
    elasticsearch10-查询文档处理
    【推荐系统】多任务学习之ESMM模型(更新ing)
    helm 部署golang应用
    能源企业如何构建网络安全体系?8月18日实战专家在线分享破局之道
    大白话讲解IOC和AOP
    Linux常见指令:从基础到理论
    HarmonyOS CPU与I/O密集型任务开发指导
  • 原文地址:https://blog.csdn.net/festone000/article/details/126557708