Java中TCP端口号的最大值常量是多少?

12

在Java或常用库(如Apache Commons)中,是否有公共常量来定义最大TCP端口号(65535),我可以在我的代码中引用它(而不是使用硬编码的整数)?


4
除非重新设计 TCP 以允许更高的端口号(这是不必要的),否则它将永远不会改变;使用“0xffff”是一种快速放置它的方法。 - ratchet freak
2
我会在需要的类中创建一个本地常量。 - Florian F
总之,不需要。你为什么觉得需要呢? - user207421
3
我认为这个问题很相关。为什么我们需要定义一个众所周知的常数? - Morgan Courbet
我不明白为什么我必须自己定义它,因为它已经在RFC(https://www.ietf.org/rfc/rfc793.txt)中定义了,而且它涉及到像TCP这样广泛使用的东西,所以你会期望它在某个常见和合理的地方被定义。我个人预期它会在Java的java.net.Socket中,因为它当然使用端口,并且在Java自己的类中,它是基于TCP最多的类。 - dammkewl
1
你可以使用 (Short.MAX_VALUE << 1) :) - Malt
1个回答

15

恐怕你没有可以使用的。

查看Java 8的源代码,我发现Socket类在多个函数中用以下代码来验证有效端口:

private static int checkPort(int port) {
    if (port < 0 || port > 0xFFFF)
        throw new IllegalArgumentException("port out of range:" + port);
    return port;
}

这可以在java.net.InetSocketAddress.checkPort(int)中找到。

正如您所看到的,Java本身也没有使用命名常量。

代码搜索在java.net.HostPortrange中找到以下结果:

static final int PORT_MIN = 0;
static final int PORT_MAX = (1 << 16) -1;

但是你可以看到这不是一个公共的参考。在java.net.SocketPermission中出现了另一个私有参考。

所以经过上面的检查,我得出结论:Java API中没有可用的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接