Bladeren bron

消息解析错误增加更详细的提示,可能外网探测端口,打印对方ip

tanghai 6 jaren geleden
bovenliggende
commit
097f61e197

+ 2 - 2
Unity/Assets/Model/Module/Message/Network/TCP/PacketParser.cs

@@ -61,14 +61,14 @@ namespace ETModel
 									this.packetSize = BitConverter.ToInt32(this.memoryStream.GetBuffer(), 0);
 									if (this.packetSize > ushort.MaxValue * 16 || this.packetSize < Packet.MinPacketSize)
 									{
-										throw new Exception($"recv packet size error: {this.packetSize}");
+										throw new Exception($"recv packet size error, 可能是外网探测端口: {this.packetSize}");
 									}
 									break;
 								case Packet.PacketSizeLength2:
 									this.packetSize = BitConverter.ToUInt16(this.memoryStream.GetBuffer(), 0);
 									if (this.packetSize > ushort.MaxValue || this.packetSize < Packet.MinPacketSize)
 									{
-										throw new Exception($"recv packet size error: {this.packetSize}");
+										throw new Exception($"recv packet size error:, 可能是外网探测端口: {this.packetSize}");
 									}
 									break;
 								default:

+ 1 - 1
Unity/Assets/Model/Module/Message/Network/TCP/TChannel.cs

@@ -269,7 +269,7 @@ namespace ETModel
 				}
 				catch (Exception ee)
 				{
-					Log.Error(ee);
+					Log.Error($"ip: {this.RemoteAddress} {ee}");
 					this.OnError(ErrorCode.ERR_SocketError);
 					return;
 				}

+ 5 - 0
Unity/Assets/Model/Module/Message/OpcodeTypeComponent.cs

@@ -67,6 +67,11 @@ namespace ETModel
 		{
 #if SERVER
 			Type type = this.GetType(opcode);
+			if (type == null)
+			{
+				// 服务端因为有人探测端口,有可能会走到这一步,如果找不到opcode,抛异常
+				throw new Exception($"not found opcode: {opcode}");
+			}
 			return Activator.CreateInstance(type);
 #else
 			return this.typeMessages[opcode];

+ 3 - 4
Unity/Assets/Model/Module/Message/Session.cs

@@ -153,14 +153,13 @@ namespace ETModel
 			catch (Exception e)
 			{
 				// 出现任何消息解析异常都要断开Session,防止客户端伪造消息
-				Log.Error($"opcode: {opcode} {this.Network.Count} {e} ");
+				Log.Error($"opcode: {opcode} {this.Network.Count} {e}, ip: {this.RemoteAddress}");
 				this.Error = ErrorCode.ERR_PacketParserError;
 				this.Network.Remove(this.Id);
 				return;
 			}
-				
-			IResponse response = message as IResponse;
-			if (response == null)
+
+			if (!(message is IResponse response))
 			{
 				this.Network.MessageDispatcher.Dispatch(this, opcode, message);
 				return;