我想在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,以便您了解其中的区别?

07-25 20:25