java - 如何在java中使用jpcap识别接收到的数据包是使用TCP还是UDP?

标签 java network-programming jpcap

我想解析 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/

相关文章:

java - 从数据包中显示 IP 地址

java - generatedId = true 的 getDao 异常

java - 我的 Java 正则表达式没有捕获组

java - 当我尝试将对象添加到 ArrayList 时,它添加了哈希码,不知道如何解决。初学者

java - 这是一个 N+1 问题吗?我该如何解决它?

c# - 等待网络 C# 控制台应用程序完全启动

linux - Golang UDP Server 只接收本地发送的数据包

java - HTTP 响应与请求有何关系?

c# - 跨线程互斥?