首页 前端知识 C# DotNetty客户端

C# DotNetty客户端

2024-09-27 09:09:48 前端知识 前端哥 902 679 我要收藏

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");
}
}
复制
转载请注明出处或者链接地址:https://www.qianduange.cn//article/18577.html
标签
评论
还可以输入200
共0条数据,当前/页
发布的文章

安装Nodejs后,npm无法使用

2024-11-30 11:11:38

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!