当前位置: 首页 > 知识库问答 >
问题:

如何找出哪个地址导致 Netty 5 UDP 中的异常?

秦斌
2023-03-14

我是JRakNet的创建者,JRakNet是一个网络库,它实现了适用于Java的最新协议RakNet的基础知识。我制作了这个库,这样我就可以为使用RakNet的Minecraft:携带版制作一个多人游戏服务器。

然而,我在服务器和客户端遇到的一个问题是处理程序的异常处理。每当发送无效数据包时,数据就会被错误读取,异常就会像正常情况一样被抛出。然而,我需要找到一种方法来找出导致异常的外部地址。

通常,在使用ServerBootstrap的TCP服务器上,我能够对老板和工作组进行分组,因此当发现异常时,我知道它来自哪里,因为客户端有自己的处理程序专用于它。但是RakNet是UDP,这意味着它是无连接的,数据包可以来自任何地方,所以我只有一个处理程序。因此,每当抛出异常时,我都不知道是谁造成的。我尝试过使用忽略的例外列表,但我认为这非常低效。我尝试过在代码中使用名为lastSender的变量,因此每当抛出异常时,它都会查找导致错误的人。这是找出导致异常的原因的好方法吗?或者有没有另一种更好的方法来找出谁在UDP Netty服务器上导致了错误?

发布时的拉克网客户端类

发布时的RakNetClientHandler类a

如果需要,以下是发布时的整个项目代码

我需要找到一种好方法来确定是哪个地址导致了原始Bootstrap Netty UDP服务器/客户端上的异常。我已经尝试将ServerBootstrap与UDP结合使用,但它似乎仍然只使用一个通道,如这里所述

暂时还没有答案

 类似资料:
  • 我们使用CDI和CMT(容器管理事务)连接到web应用程序中的数据库,并标记从前端调用的方法,这些方法需要使用以下事务: 这将创建一个新的CDI事务,但是现在如果在执行此代码块或从此方法调用的任何其他代码块时发生异常,它将抛出错误消息: 有没有办法让CDI重新抛出嵌套错误,以便您可以轻松地调试回滚的真正原因是什么? (在 Java-EE7、Glassfish 4.0、JSF 2.2.2 上运行)

  • 问题内容: 我们正在将CDI与CMT(容器管理的事务)一起使用,以连接到Web应用程序中的数据库,并标记从前端调用的需要事务的方法: 这将创建一个新的CDI事务,但是现在,如果在执行此代码块或从此方法调用的任何其他代码块时发生异常,则会抛出错误消息: 无论如何,是否有让CDI重新抛出嵌套错误的方法,以便您可以轻松调试回滚的真正原因是什么? (在Java-EE7,Glassfish 4.0,JSF

  • 问题内容: 我正在编写一个程序,从账单和小费率中汇总小费和总计。 我正在寻找一种找出哪个变量引发InputMismatchException的方法,因此可以将哪个变量名称添加到变量errorMessage中并打印到屏幕上。 问题答案: 变量不会引发异常,而是对变量赋值的右侧进行评估,因此在异常中没有任何信息可以说明将成功赋给哪个变量。 您可以考虑使用一种包含提示消息和重试的新方法: 哪里是: 对于

  • 问题内容: 与多个用户一起测试我的应用程序时,我遇到了ORA-00060死锁错误。我不确定如何确定此错误的原因,因此,如果有人可以帮助我,将不胜感激。 我查看了为此事件生成的跟踪文件,它显示了导致此问题的查询: 它也产生了这个: 我如何使用以上信息来找出导致问题的原因?TABLE_A或TABLE_B上都没有任何未索引的外键(我相信这通常是导致这种类型错误的原因)。 当我运行此查询时: 我在完全不同

  • 问题内容: 我对Java线程技术比较陌生,并且我注意到,每次使用Thread.sleep()时,我都必须捕获InterrupetdException。 哪种行为会导致这种情况,并且在具有监视器线程的简单应用程序中,我可以忽略该异常吗? 问题答案: 好吧,如果其他一些线程调用thread.interupt(),则在该线程处于休眠状态时,您将获得Exception。是的,您可能只需将try..catc

  • 问题内容: 我需要检查异常是否由某些数据库问题引起。我收到异常,并检查其原因是否包含“ ORA”字符串,然后将其返回(类似于“ ORA-00001”)。这里的问题是我收到的异常嵌套在其他异常中,因此,如果我不知道它是否是oracle异常,则必须检查该异常的原因,以此类推。有没有更清洁的方法可以做到这一点?有没有办法知道给定异常的第一个原因(嵌套的异常)? 我当前的代码如下所示: 问题答案: 只需遍