当前位置: 首页 > news >正文

C# DotNetty客户端

1. 引入DotNetty包

我用的开发工具是VS2022,不同工具引入可能会有差异

工具——>NuGet包管理器——>管理解决方案的NuGet程序包
在这里插入图片描述
搜索DotNetty
在这里插入图片描述

2.新建EchoClientHandler.cs类

用于接收服务器返回数据

public class EchoClientHandler : SimpleChannelInboundHandler<IByteBuffer>
{/// <summary>/// Read0是DotNetty特有的对于Read方法的封装/// 封装实现了:/// 1. 返回的message的泛型实现/// 2. 丢弃非该指定泛型的信息/// </summary>/// <param name="ctx"></param>/// <param name="msg"></param>protected override void ChannelRead0(IChannelHandlerContext ctx, IByteBuffer msg){if (msg != null){Console.WriteLine("Receive From Server:" + msg.ToString(Encoding.UTF8));}//ctx.WriteAsync(Unpooled.CopiedBuffer(msg));}public override void ChannelReadComplete(IChannelHandlerContext context){context.Flush();}public override void ChannelActive(IChannelHandlerContext context){Console.WriteLine("==================ChannelActive======================");//context.WriteAndFlushAsync(Unpooled.CopiedBuffer(Encoding.UTF8.GetBytes("Hello World!")));}public override void ChannelInactive(IChannelHandlerContext context){Console.WriteLine("===============ChannelInactive==============");base.ChannelInactive(context);context.CloseAsync();}public override void ExceptionCaught(IChannelHandlerContext context, Exception exception){Console.WriteLine("===============ExceptionCaught==============");Console.WriteLine(exception);context.CloseAsync();}
}

3.新建DotNettyClient.cs客户端类

public class DotNettyClient
{private MultithreadEventLoopGroup group;private Bootstrap bootstrap;private IChannel channel;public async Task StartAsync(){group = new MultithreadEventLoopGroup();try{bootstrap = new Bootstrap().Group(group).Channel<TcpSocketChannel>().Option(ChannelOption.TcpNodelay, true).Handler(new ActionChannelInitializer<ISocketChannel>(channel =>{IChannelPipeline pipeline = channel.Pipeline;pipeline.AddLast(new StringDecoder(Encoding.UTF8));pipeline.AddLast(new StringEncoder(Encoding.UTF8));pipeline.AddLast(new IdleStateHandler(0, 0, 600));pipeline.AddLast(new EchoClientHandler());}));channel = await bootstrap.ConnectAsync("127.0.0.1", 9997);//byte[] bytes = Encoding.UTF8.GetBytes("aaaaa");//await channel.WriteAndFlushAsync(Unpooled.WrappedBuffer(bytes));Console.WriteLine("Connected to server.");// 发送消息给服务器SendMessage("我是客户端");//关闭客户端连接//await channel.CloseAsync();//Console.WriteLine("Client connection closed.");}catch (Exception ex) { Console.WriteLine(ex.ToString());Console.WriteLine(ex.StackTrace);}finally{await group.ShutdownGracefullyAsync();}}public void SendMessage(string message){if (channel != null && channel.Open){Console.WriteLine("666666666666666666666666666");channel.WriteAndFlushAsync(message);Console.WriteLine("Sent message to server: " + message);}}
}

4.使用DotNetty

我这里是窗体应用程序

public partial class Form1 : Form
{public Form1(){InitializeComponent();startClient();}public async Task startClient() {DotNettyClient client = new DotNettyClient();await client.StartAsync();//连接服务//client.SendMessage("111111111111111");}
}
http://www.lryc.cn/news/449785.html

相关文章:

  • 4G模组SIM卡电路很简单,但也要注意这些坑
  • 常见电脑品牌BIOS设置与进入启动项快捷键
  • C语言中的日志机制:打造全面强大的日志系统
  • 局域网广域网,IP地址和端口号,TCP/IP 4层协议,协议的封装和分用
  • LabVIEW项目编码器选择
  • Spring Boot实现房产租赁业务逻辑
  • 汽车3d动画渲染选择哪个?选择最佳云渲染解决方案
  • 火语言RPA流程组件介绍--网页/元素截图
  • VSCode编程配置再次总结
  • 银行管理系统
  • 极狐GitLab 17.4 重点功能解读【四】
  • [每日一练]利用自连接实现数量查询
  • Linux云计算 |【第四阶段】RDBMS1-DAY3
  • 初始MYSQL数据库(8)—— JDBC编程
  • Vue $router.push打开新窗口
  • SQL进阶技巧:如何利用if语句简化where或join中的条件 | if条件语句的优雅使用方法
  • SpringCloud-Alibaba第二代微服务快速入门
  • JSON字符串转换成对象
  • 第三十五章 结合加密和签名
  • FastAPI 第八课 -- 路径操作依赖项
  • 大厂面试真题-说一下Mybatis的缓存
  • jQuery UI 工作原理
  • CS 工作笔记:SmartEdit 里创建的是 CMS Component
  • Java面试经验总结之SSM框架+springboot
  • Unity 热更新(HybridCLR+Addressable)-设置打包路径和加载路径、打开Hosting服务、打包
  • 享元(轻量级)模式
  • 基于php的幸运舞蹈课程工作室管理系统
  • NLP任务的详细原理与步骤的详细讲解
  • Kotlin 处理字符串和正则表达式(二十一)
  • 一站式大语言模型API调用:快速上手教程