我想解析 TCPPacket 或 UDPPacket 中收到的数据包,但如果我写“TCPPacket pac3 = (TCPPacket) packet;”对于使用 UDP 作为传输层协议(protocol)的数据包,我得到一个异常 “线程“main”中的异常java.lang.ClassCastException:jpcap.packet.UDPPacket无法转换为jpcap.packet.TCPPacket”
如何识别我收到的数据包是使用 TCP 还是 UDP? 实际上我想从收到的数据包中获取端口号。
最佳答案
您的问题的明显答案是使用 instanceof
运算符:
if (packet instanceof TCPPacket) {
TCPPacket pac3 = (TCPPacket)packet;
// ...
}
但是有点臭。我不知道 JPCAP API,但我会看一下是否可以进行任何 API 调用来询问数据包的类型。或者也许您可以设置两种不同的机制( channel 、套接字、回调???)来分别接收 UDP 和 TCP,以便您知道其中的区别?
关于java - 如何在java中使用jpcap识别接收到的数据包是使用TCP还是UDP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9487591/