64 lines
2.1 KiB
C#
64 lines
2.1 KiB
C#
using DotNetty.Transport.Channels;
|
|
using DotNetty.Buffers;
|
|
using System;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Diagnostics;
|
|
using Serilog;
|
|
|
|
namespace Yunda.SOMS.OperationsMainSiteGatewayServer.TcpSocket.Server
|
|
{
|
|
public class HexDumpHandler : ChannelHandlerAdapter
|
|
{
|
|
public async override Task WriteAsync(IChannelHandlerContext context, object message)
|
|
{
|
|
if (message is IByteBuffer buffer)
|
|
{
|
|
// 将字节缓冲区转换为十六进制字符串
|
|
string hexString = ByteBufferToHex(buffer);
|
|
Debug.WriteLine($"发送的报文: {hexString}");
|
|
}
|
|
|
|
// 将消息传递给下一个处理器
|
|
await base.WriteAsync(context, message);
|
|
}
|
|
|
|
private string ByteBufferToHex(IByteBuffer buffer)
|
|
{
|
|
StringBuilder hex = new StringBuilder(buffer.ReadableBytes * 2);
|
|
for (int i = buffer.ReaderIndex; i < buffer.WriterIndex; i++)
|
|
{
|
|
byte b = buffer.GetByte(i);
|
|
hex.AppendFormat("{0:X2} ", b);
|
|
}
|
|
return hex.ToString().Trim();
|
|
}
|
|
public override void ChannelRead(IChannelHandlerContext context, object message)
|
|
{
|
|
if (message is DotNetty.Buffers.IByteBuffer buffer)
|
|
{
|
|
try
|
|
{
|
|
int length = buffer.ReadableBytes;
|
|
byte[] bytes = new byte[length];
|
|
buffer.GetBytes(buffer.ReaderIndex, bytes); // 读取字节内容
|
|
|
|
string hexDump = BitConverter.ToString(bytes).Replace("-", " ");
|
|
Log.Information("收到信息 (HexDump):");
|
|
Log.Information(hexDump);
|
|
}
|
|
finally
|
|
{
|
|
buffer.Release(); // 确保释放缓冲区
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// 如果不是 IByteBuffer 类型的数据,直接传递给下一个处理器
|
|
base.ChannelRead(context, message);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|