首页 > 其他分享 >SuperSocket 服务端 和 SuperSocket.ClientEngine 客户端及普通客户端

SuperSocket 服务端 和 SuperSocket.ClientEngine 客户端及普通客户端

时间:2023-04-04 23:12:48浏览次数:28  
标签:Console string void client WriteLine new 客户端 服务端 SuperSocket

internal class Program
    {
        //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 = 8000;
        //    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(3000);


        //        接收
        //        socket.Receive(arr);
        //        string v2 = Encoding.UTF8.GetString(arr);
        //        Console.WriteLine($"svr2 收到:{v2}");

        //    }

        //}


        private static AsyncTcpSession client;
        static System.Timers.Timer timer = null;
        private int port = 40410;

        static void Main(string[] args)
        {
            new Program().Link();
            string input = Console.ReadLine();
            while (input != "exit" && !string.IsNullOrEmpty(input))
            {
                if (client != null && client.IsConnected)
                {
                    var msg = System.Text.Encoding.Default.GetBytes("echo hello " + input + "\r\n");
                    client.Send(msg, 0, msg.Length);
                    input = Console.ReadLine();
                }

            }
        }
        private void Link()
        {
            client = new AsyncTcpSession();
            client.Connected += OnClientConnected;
            client.Error += OnClientError;
            client.Closed += OnClientClosed;
            // 收到服务器数据事件
            client.DataReceived += client_DataReceived;

            //每10s发送一次心跳或尝试一次重连
            timer = new System.Timers.Timer(10000);
            timer.Elapsed += new System.Timers.ElapsedEventHandler((s, x) =>
            {
                //心跳包
                if (client.IsConnected)
                {
                    var heartMsg = System.Text.Encoding.Default.GetBytes("echo heart 2\r\n");
                    client.Send(heartMsg, 0, heartMsg.Length);
                }
                //断线重连
                else if (!client.IsConnected)
                {
                    client.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), port));
                }
            });
            timer.Enabled = true;
            timer.Start();

        }
        private void OnClientConnected(object sender, EventArgs e)
        {
            Console.WriteLine("已连接" + '\n');
        }
        private void OnClientClosed(object sender, EventArgs e)
        {
            Console.WriteLine("已断开" + '\n');
        }
        private void OnClientError(object sender, ErrorEventArgs e)
        {
            Console.WriteLine($"错误:{e.Exception.Message}" + '\n');
        }
        void client_DataReceived(object sender, DataEventArgs e)
        {
            string msg = Encoding.UTF8.GetString(e.Data);
            Console.WriteLine("客户端接收:"+msg.Trim('\0'));
        }

    }
    }
internal class Program
    {
        private static async Task Main(string[] args)
        {
            var host = SuperSocketHostBuilder
                   .Create<StringPackageInfo, CommandLinePipelineFilter>()
                   .UsePackageHandler(async (session, package) =>
                   {
                       var result = 0;

                       string? v = package.Key.ToString();
                       string? body = package.Body.ToString();
                       Console.WriteLine($"服务端 接收 key: {v}");
                       Console.WriteLine($"服务端 接收 value: {body}");

                       string v1 = $"hello 我收到: {v} {body}";
                       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<ListenOptions>() {
                   new ListenOptions
                        {
                            Ip = "Any",
                            Port = 40410
                        }
                      };
                   })
                   .Build();


            await host.RunAsync();
        }
    }

 

标签:Console,string,void,client,WriteLine,new,客户端,服务端,SuperSocket
From: https://www.cnblogs.com/mojiejushi/p/17288228.html

相关文章

  • MySQL客户端建立连接的两种类型
     MySQL客户端建立连接的两种类型 通常,默认情况下,客户端连接MySQL服务器有两种类型:使用Unix套接字文件通过文件系统中的文件进行连接(默认/tmp/mysql.sock),或者使用通过端口号连接的TCP/IP(此类通常涉及远程网络交互)。Unix套接字文件连接比TCP/IP更快,但只能在连接到同一......
  • 使用wsimport快速生成soap客户端代码
    在jdk的bin目录下cmd进入操作界面使用命令wsimport.exe-encodingutf-8-keep-s输出java文件路径wsdl文件路径 ......
  • frp内网穿透环境搭建--服务端ubuntu 客户端win10
    前提条件:1个公网ip服务器,例如我的是腾讯云服务器ubuntu20下载frp软件,下的是0.33.0版本,该版本直接把软件封装成服务,能用ubuntu直接定义开机自启等github:https://github.com/fatedier/frp.git注意查看ubuntu系统的架构是arm还是amd,下载对应版本,否则安装了也用不了解压文件,编辑......
  • 安装MYSQL_5.0/8.0教程(附数据库和客户端工具下载链接)
    1.Mysql5.7下载网盘下载(推荐):链接:https://pan.quark.cn/s/d98d2536f847提取码:kbyN 官网下载:mysql下载地址:https://dev.mysql.com/downloads/windows/installer/8.0.html跳转到上述页面,选择Archives(历史存档)选择版本-下载2.Mysql安装双击打开下载好的文件。以前安......
  • php-websocket hyperf/websocket-server/client 客户端和服务器实时双向数据传输
    WebSocket服务WebSocket是一种通信协议,可在单个TCP连接上进行全双工通信。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocketAPI中,浏览器和服务器只需要完成一次握手,两者之间就可以建立持久性的连接,并进行双向数据传输。Hyperf......
  • MQTT再学习 -- 安装MQTT客户端及测试
    上一篇文章我们已经讲了MQTT服务器的搭建,参看:MQTT再学习--搭建MQTT服务器及测试接下来我们看一下MQTT客户端。一、客户端下载首先,客户端也有多种,我们需要面临选择了。参看:基于mqtt的消息推送(三)客户端实现现有客户端sdk分析,基本分为两大类:一类移植自C类库,如Mosquitto,一类是用o......
  • 【FastDFS分布式文件系统】5.FastDFS客户端的配置、启动和常用命令
    上一篇我们介绍了FastDFS服务端的tracker追踪服务器和storage存储服务器,本篇来介绍一下客户端的启动,以及外部客户端如何与FastDFS服务端进行连接。和之前一样,服务端部署在三台服务器上:其中192.168.195.129是tracker追踪服务器,192.168.195.130和192.168.195.131......
  • 【FastDFS分布式文件系统】6.FastDFS客户端启动与Java连接
    上一篇我们讲解了如何配置和启动FastDFS客户端,以及客户端上传下载的一些常用命令。那么,在许多需要进行分布式文件上传与下载的系统中,就不能像执行Linux命令一样去上传和下载文件,它们需要使用开发系统的语言去操作客户端使用其命令与服务端进行交互,此时FastDFS......
  • SignalR服务端及客户端实现
    服务器端:引用nuget:1、Microsoft.AspNet.SignalR.SelfHost2、Microsoft.Owin.CorsinternalclassProgram{staticvoidMain(string[]args){stringuri="http://localhost:8081";using(WebApp.Start(uri))......
  • 第三十四篇 vue - 应用规模化 - 服务端渲染 - SSR
    总览什么是SSRSSR-服务端渲染Vue.js是一个用于构建客户端应用的框架。默认情况下,Vue组件的职责是在浏览器中生成和操作DOMVue也支持将组件在服务端直接渲染成HTML字符串,作为服务端响应返回给浏览器,最后在浏览器端将静态的HTML“激活”(hydrate)为能够交互的客户端......