java - 打开不同的端口还是打开一个带有标识符(或其他)的端口更好?
问题描述
我正在编写一个系统,其中有三个不同的 java 应用程序通过 TCP-IP 相互交互。其中两个应用程序通过 ServerSocket与另一个应用程序连接,称为Directory 。
其中一个应用程序连接它只是为了登录并被添加到列表中,而另一个应用程序连接它只是为了请求列表或发送消息。
这些连接都是通过Directory的 ServerSocket 中的同一个端口完成的,与Directory连接的应用程序通过套接字发送一个字符串,前面带有一种任务标识符,然后 Directory 处理它以了解什么它必须这样做。
这种读取标识符字符串的方法可以吗?它是高效的、可维护的,还是应该以其他方式完成?例如,为不同类型的客户端设置不同端口的 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();
}
}
解决方案
如果所有应用程序使用相同的协议,这基本上意味着只要所有应用程序使用相同的数据包结构,你就可以使用一个端口。使用一个端口的另一位专业人士是它的配置较少,因为假设您有防火墙,您只需要打开这个端口,如果有人试图在受限网络中连接,同样适用。
如果应用程序使用不同的协议,最好使用三个端口。
推荐阅读
- mysql - SQL自定义排序
- android - 将数据保存到 Firebase 实时数据库 -Android
- python - MongoDB 仅在 localhost 中记录文档
- android - Android,在android项目中加载大量图片
- c# - Jenkins 在 C# 上使用 Access 数据库引擎构建用于 Selenium 测试,获取 Microsoft.ACE.OLEDB.12.0' 提供程序未在本地计算机上注册
- python - Python 错误:ValueError:长度不匹配:预期轴有 4 个元素,新值有 5 个元素
- python - 从python中的文本文件中获取特定的行和数据
- node.js - 使用 Git 和 Node/Npm 进行多部分项目的良好项目设置
- trace32 - 如果启用断点,Lauterbach Trace 32 ICE 再次进入 main
- javascript - 如何创建一个不会在旧浏览器上导致错误的 ES6 模块?