我正在编写一个系统,其中有三个不同的Java应用程序通过TCP-IP相互交互。这些应用程序中有两个通过ServerSocket与另一个称为Directory的应用程序连接。其中一个应用程序仅与之连接以登录并添加到列表中,而另一个应用程序仅与之连接以请求列表或发送消息。这些连接都是通过Directory的ServerSocket中的同一端口完成的,与Directory连接的应用程序通过套接字发送一个String,前面带有一条任务标识符,目录将对其进行处理以了解其必须执行的操作。这种读取标识符字符串的方法可以吗?它是否有效,可维护,还是应该以其他方式完成?例如使ServerSockets具有用于不同类型的客户端的不同端口或用于不同功能的不同端口。提到的功能暂时是唯一的功能,但是可能会添加更多功能,因此我想知道这是否可行。
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();
}
}
如果所有应用程序使用相同的协议,这基本上意味着只要所有应用程序使用相同的数据包结构,那么使用一个端口就可以了。另一个使用一个端口的专业人士是,它的配置较少,因为,假设您有防火墙,则只需要打开该端口,并且如果有人尝试在受限网络内进行连接,则同样适用。
如果应用程序使用不同的协议,那么最好使用三个端口。