打开不同的端口或一个带有标识符(或其他)的端口更好吗?

Is it better to open different ports or one port with identifiers (or else)?

我正在编写一个系统,其中有三个不同的 java 应用程序通过 TCP-IP 相互交互。其中两个应用程序通过 ServerSocket 与另一个应用程序连接,称为 Directory
其中一个应用程序与其连接只是为了登录并被添加到列表中,而另一个应用程序与其连接只是为了请求列表或发送消息。
这些连接都是通过 Directory 的 ServerSocket 中的同一个端口完成的,与 Directory 连接的应用程序通过套接字发送一个字符串在前面加上一种任务标识符,目录然后处理它以知道它必须做什么。
这种读取标识符字符串的方法可以吗?它是高效的、可维护的,还是应该以其他方式完成?例如为不同类型的客户端设置不同端口的 ServerSocket,或为不同功能设置不同端口的 ServerSocket。提到的功能是目前唯一的功能,但可能会添加更多功能,所以我想知道这是否是一个可行的实现。

public class Directory {
    private ServerSocket server;
    public Directory() {
        super();
    }

    public void openServer(int port) throws IOException {
        new Thread() {
            public void run() {
                try {
                    server = new ServerSocket(port);
                    while (true) {
                        Socket socket = server.accept();
                        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
                        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                        String identifier = in.readLine();
                        if (identifier.equalsIgnoreCase("Connect")) {
                            connect(); // stub
                        } else if (identifier.equalsIgnoreCase("NeedList")) {
                            giveList(list); // stub
                        } else if (identifier.equalsIgnoreCase("SendMessage")) {
                            sendMessage(); // stub
                        }
                    }
                } catch (IOException e) {
                    // interrupted
                }
            }
        }.start();
    }
}

如果所有应用程序都使用相同的协议,这基本上意味着只要所有应用程序都使用相同的数据包结构,您就可以使用一个端口。 使用一个端口的另一个优点是它的配置更少,因为假设你有一个防火墙,你只需要打开这个端口,如果有人试图在受限网络内连接,同样适用。

如果应用程序使用不同的协议,您最好使用三个端口。