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