diff --git a/src/JT808.DotNetty.Core/Codecs/JT808TcpDecoder.cs b/src/JT808.DotNetty.Core/Codecs/JT808TcpDecoder.cs index 3eb3006..e1d8612 100644 --- a/src/JT808.DotNetty.Core/Codecs/JT808TcpDecoder.cs +++ b/src/JT808.DotNetty.Core/Codecs/JT808TcpDecoder.cs @@ -10,11 +10,23 @@ namespace JT808.DotNetty.Core.Codecs { protected override void Decode(IChannelHandlerContext context, IByteBuffer input, List output) { - byte[] buffer = new byte[input.Capacity + 2]; - input.ReadBytes(buffer, 1, input.Capacity); - buffer[0] = JT808Package.BeginFlag; - buffer[input.Capacity + 1] = JT808Package.EndFlag; - output.Add(buffer); + //过滤掉不是808标准包 + //不包括头尾标识 + //(消息 ID )2+(消息体属性)2+(终端手机号)6+(消息流水号)2+(检验码 )1 + if (input.Capacity < 12) + { + byte[] buffer = new byte[input.Capacity]; + input.ReadBytes(buffer, 0, input.Capacity); + return; + } + else + { + byte[] buffer = new byte[input.Capacity + 2]; + input.ReadBytes(buffer, 1, input.Capacity); + buffer[0] = JT808Package.BeginFlag; + buffer[input.Capacity + 1] = JT808Package.EndFlag; + output.Add(buffer); + } } } } diff --git a/src/JT808.DotNetty.Core/Codecs/JT808UdpDecoder.cs b/src/JT808.DotNetty.Core/Codecs/JT808UdpDecoder.cs index df27984..a0b9c8c 100644 --- a/src/JT808.DotNetty.Core/Codecs/JT808UdpDecoder.cs +++ b/src/JT808.DotNetty.Core/Codecs/JT808UdpDecoder.cs @@ -13,9 +13,21 @@ namespace JT808.DotNetty.Core.Codecs { if (!message.Content.IsReadable()) return; IByteBuffer byteBuffer = message.Content; - byte[] buffer = new byte[byteBuffer.ReadableBytes]; - byteBuffer.ReadBytes(buffer); - output.Add(new JT808UdpPackage(buffer, message.Sender)); + //过滤掉非808标准包 + //不包括头尾标识 + //(消息 ID )2+(消息体属性)2+(终端手机号)6+(消息流水号)2+(检验码 )1 + if (byteBuffer.ReadableBytes < 12) + { + byte[] buffer = new byte[byteBuffer.ReadableBytes]; + byteBuffer.ReadBytes(buffer, 0, byteBuffer.ReadableBytes); + return; + } + else + { + byte[] buffer = new byte[byteBuffer.ReadableBytes]; + byteBuffer.ReadBytes(buffer); + output.Add(new JT808UdpPackage(buffer, message.Sender)); + } } } } diff --git a/src/JT808.DotNetty.Kafka/JT808.DotNetty.Kafka.csproj b/src/JT808.DotNetty.Kafka/JT808.DotNetty.Kafka.csproj index 61f131c..73dd61a 100644 --- a/src/JT808.DotNetty.Kafka/JT808.DotNetty.Kafka.csproj +++ b/src/JT808.DotNetty.Kafka/JT808.DotNetty.Kafka.csproj @@ -1,4 +1,4 @@ - + JT808.DotNetty.Kafka @@ -6,8 +6,5 @@ 基于Kafka的JT808消息发布与订阅 基于Kafka的JT808消息发布与订阅 - - - diff --git a/src/JT808.DotNetty.RabbitMQ/JT808.DotNetty.RabbitMQ.csproj b/src/JT808.DotNetty.RabbitMQ/JT808.DotNetty.RabbitMQ.csproj index fb1c8e0..8e980a9 100644 --- a/src/JT808.DotNetty.RabbitMQ/JT808.DotNetty.RabbitMQ.csproj +++ b/src/JT808.DotNetty.RabbitMQ/JT808.DotNetty.RabbitMQ.csproj @@ -7,8 +7,5 @@ 基于RabbitMQ的JT808消息发布与订阅 基于RabbitMQ的JT808消息发布与订阅 - - - diff --git a/src/JT808.DotNetty.Tcp/Handlers/JT808TcpServerHandler.cs b/src/JT808.DotNetty.Tcp/Handlers/JT808TcpServerHandler.cs index f815e1f..1666b43 100644 --- a/src/JT808.DotNetty.Tcp/Handlers/JT808TcpServerHandler.cs +++ b/src/JT808.DotNetty.Tcp/Handlers/JT808TcpServerHandler.cs @@ -2,11 +2,9 @@ using DotNetty.Transport.Channels; using JT808.Protocol; using System; -using JT808.DotNetty.Core; using Microsoft.Extensions.Logging; using JT808.DotNetty.Core.Services; using JT808.DotNetty.Abstractions.Enums; -using JT808.Protocol.Interfaces; using JT808.Protocol.Exceptions; using JT808.DotNetty.Core.Session; using JT808.DotNetty.Abstractions; @@ -39,6 +37,7 @@ namespace JT808.DotNetty.Tcp.Handlers this.JT808MsgProducer = jT808MsgProducer; this.jT808AtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808TransportProtocolType.tcp); this.JT808Serializer = jT808Config.GetSerializer(); + jT808Config.SkipCRCCode = true; logger = loggerFactory.CreateLogger(); } @@ -50,11 +49,11 @@ namespace JT808.DotNetty.Tcp.Handlers //要是一定要解析到数据体可以在JT808MsgIdHandlerBase类中根据具体的消息, //解析具体的消息体,具体调用JT808Serializer.Deserialize JT808HeaderPackage jT808HeaderPackage = JT808Serializer.Deserialize(msg); - jT808AtomicCounterService.MsgSuccessIncrement(); if (logger.IsEnabled(LogLevel.Trace)) { logger.LogTrace($"accept package success count=>{jT808AtomicCounterService.MsgSuccessCount.ToString()},accept msg=>{ByteBufferUtil.HexDump(msg)}"); } + jT808AtomicCounterService.MsgSuccessIncrement(); jT808SessionManager.TryAdd(jT808HeaderPackage.Header.TerminalPhoneNo,ctx.Channel); JT808MsgProducer.ProduceAsync(jT808HeaderPackage.Header.TerminalPhoneNo, msg); } diff --git a/src/JT808.DotNetty.Tests/JT808.DotNetty.Hosting/Program.cs b/src/JT808.DotNetty.Tests/JT808.DotNetty.Hosting/Program.cs index 3402aa0..056a26a 100644 --- a/src/JT808.DotNetty.Tests/JT808.DotNetty.Hosting/Program.cs +++ b/src/JT808.DotNetty.Tests/JT808.DotNetty.Hosting/Program.cs @@ -53,7 +53,7 @@ namespace JT808.DotNetty.Hosting services.AddJT808Configure() .AddJT808NettyCore(hostContext.Configuration) .AddJT808TcpNettyHost() - //.AddJT808UdpNettyHost() + .AddJT808UdpNettyHost() .AddJT808WebApiNettyHost() .Builder(); //webapi客户端调用 diff --git a/src/JT808.DotNetty.Udp/Handlers/JT808UdpServerHandler.cs b/src/JT808.DotNetty.Udp/Handlers/JT808UdpServerHandler.cs index 6242579..1a0a023 100644 --- a/src/JT808.DotNetty.Udp/Handlers/JT808UdpServerHandler.cs +++ b/src/JT808.DotNetty.Udp/Handlers/JT808UdpServerHandler.cs @@ -5,9 +5,7 @@ using System; using Microsoft.Extensions.Logging; using JT808.DotNetty.Core.Metadata; using JT808.DotNetty.Core.Services; -using JT808.DotNetty.Core; using JT808.DotNetty.Abstractions.Enums; -using JT808.Protocol.Interfaces; using JT808.DotNetty.Core.Session; using JT808.DotNetty.Abstractions; @@ -40,6 +38,7 @@ namespace JT808.DotNetty.Udp.Handlers this.jT808UdpSessionManager = jT808UdpSessionManager; logger = loggerFactory.CreateLogger(); JT808Serializer = jT808Config.GetSerializer(); + jT808Config.SkipCRCCode = true; } protected override void ChannelRead0(IChannelHandlerContext ctx, JT808UdpPackage msg) @@ -50,13 +49,13 @@ namespace JT808.DotNetty.Udp.Handlers //要是一定要解析到数据体可以在JT808MsgIdHandlerBase类中根据具体的消息, //解析具体的消息体,具体调用JT808Serializer.Deserialize JT808HeaderPackage jT808HeaderPackage = JT808Serializer.Deserialize(msg.Buffer); - jT808AtomicCounterService.MsgSuccessIncrement(); - jT808UdpSessionManager.TryAdd(ctx.Channel, msg.Sender, jT808HeaderPackage.Header.TerminalPhoneNo); - JT808MsgProducer.ProduceAsync(jT808HeaderPackage.Header.TerminalPhoneNo, msg.Buffer); if (logger.IsEnabled(LogLevel.Trace)) { logger.LogTrace($"accept package success count=>{jT808AtomicCounterService.MsgFailCount.ToString()},accept msg=>{ByteBufferUtil.HexDump(msg.Buffer)}"); } + jT808AtomicCounterService.MsgSuccessIncrement(); + jT808UdpSessionManager.TryAdd(ctx.Channel, msg.Sender, jT808HeaderPackage.Header.TerminalPhoneNo); + JT808MsgProducer.ProduceAsync(jT808HeaderPackage.Header.TerminalPhoneNo, msg.Buffer); } catch (JT808.Protocol.Exceptions.JT808Exception ex) { diff --git a/src/JT808.DotNetty.sln b/src/JT808.DotNetty.sln index bf5785b..51842ff 100644 --- a/src/JT808.DotNetty.sln +++ b/src/JT808.DotNetty.sln @@ -37,9 +37,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.SimpleServer EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.CleintBenchmark", "JT808.DotNetty.CleintBenchmark\JT808.DotNetty.CleintBenchmark.csproj", "{C2B1A0F4-2C49-45DA-9F48-7A016FC6E9E1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JT808.DotNetty.Kafka", "JT808.DotNetty.Kafka\JT808.DotNetty.Kafka.csproj", "{A51A0B4A-8F7F-4827-A783-B30456FE768A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JT808.DotNetty.Kafka", "JT808.DotNetty.Kafka\JT808.DotNetty.Kafka.csproj", "{7050DC16-4CD8-406C-9F3B-F085407E94EB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JT808.DotNetty.RabbitMQ", "JT808.DotNetty.RabbitMQ\JT808.DotNetty.RabbitMQ.csproj", "{27BB3FFD-E723-439C-9ACB-9532F38A5B38}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JT808.DotNetty.RabbitMQ", "JT808.DotNetty.RabbitMQ\JT808.DotNetty.RabbitMQ.csproj", "{48C53550-610E-4CE5-AFE4-E285280A8365}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -107,14 +107,14 @@ Global {C2B1A0F4-2C49-45DA-9F48-7A016FC6E9E1}.Debug|Any CPU.Build.0 = Debug|Any CPU {C2B1A0F4-2C49-45DA-9F48-7A016FC6E9E1}.Release|Any CPU.ActiveCfg = Release|Any CPU {C2B1A0F4-2C49-45DA-9F48-7A016FC6E9E1}.Release|Any CPU.Build.0 = Release|Any CPU - {A51A0B4A-8F7F-4827-A783-B30456FE768A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A51A0B4A-8F7F-4827-A783-B30456FE768A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A51A0B4A-8F7F-4827-A783-B30456FE768A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A51A0B4A-8F7F-4827-A783-B30456FE768A}.Release|Any CPU.Build.0 = Release|Any CPU - {27BB3FFD-E723-439C-9ACB-9532F38A5B38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {27BB3FFD-E723-439C-9ACB-9532F38A5B38}.Debug|Any CPU.Build.0 = Debug|Any CPU - {27BB3FFD-E723-439C-9ACB-9532F38A5B38}.Release|Any CPU.ActiveCfg = Release|Any CPU - {27BB3FFD-E723-439C-9ACB-9532F38A5B38}.Release|Any CPU.Build.0 = Release|Any CPU + {7050DC16-4CD8-406C-9F3B-F085407E94EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7050DC16-4CD8-406C-9F3B-F085407E94EB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7050DC16-4CD8-406C-9F3B-F085407E94EB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7050DC16-4CD8-406C-9F3B-F085407E94EB}.Release|Any CPU.Build.0 = Release|Any CPU + {48C53550-610E-4CE5-AFE4-E285280A8365}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {48C53550-610E-4CE5-AFE4-E285280A8365}.Debug|Any CPU.Build.0 = Debug|Any CPU + {48C53550-610E-4CE5-AFE4-E285280A8365}.Release|Any CPU.ActiveCfg = Release|Any CPU + {48C53550-610E-4CE5-AFE4-E285280A8365}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE