如何在整个项目中访问单个数组 java
how to access a single array throughout the project java
我正在制作一个由中央服务器(如 DNS)控制的多个服务器和客户端的程序,该程序的操作是:
中央服务器启动名为Servidor_Borda
另一台服务器在 Servidor_Borda
中连接,您的 IP 保存在数组列表中。
当客户端想要连接时,他需要去 Servidor_Borda 并接收一个有效的 IP 来连接。
我的问题是当客户端请求 IP 连接时 ArrayList
总是空的,我不能做一个唯一的数组。
public class Servidor_Borda {
public static void main(String args[]) throws IOException{
int porta = 4004;
try{
ServerSocket serverSocket = new ServerSocket(porta);
Socket socketConexao;
System.out.print("Aguardando conexões...\n");
while(true){
socketConexao = serverSocket.accept();
String ip = socketConexao.getInetAddress().getHostAddress();
listaAtivos.getInstance().addServidor(ip);
TrataConexao trataC = new TrataConexao(socketConexao);
new Thread(trataC).start();
}
}catch(Exception e){
System.out.print("Porta em uso!");
}
}
}
public class listaAtivos {
private static listaAtivos singleton = null;
private ArrayList<String> servidoresConectados;
private listaAtivos(){
servidoresConectados = new ArrayList<>();
}
public static listaAtivos getInstance(){
if(singleton==null){
singleton = new listaAtivos();
}
return singleton;
}
public void addServidor(String ip){
servidoresConectados.add(ip);
exibeAtivos();
}
public String escolheServidor(){
int tam = servidoresConectados.size();
if(tam != 0){
for(int i=0;i<tam;i++){
String ip = servidoresConectados.get(i);
return ip;
}
}
return null;
}
}
public class Cliente {
public static void main(String args[]){
int porta = 4008;
String ip = listaAtivos.getInstance().escolheServidor();
Socket s = new Socket(ip,porta);
}
}
您的服务器 运行 在 4004 端口上,但您正在尝试从 4008 中的客户端访问连接。因此连接永远不会完成,因此 serverSocket.accept()
被阻止并等待永远处于阻塞状态。请在下面找到 link 了解详细信息。
http://download.java.net/jdk7/archive/b123/docs/api/java/net/ServerSocket.html#accept%28%29
但是由于您是 运行 来自另一个控制台的客户端程序,因此无法实现确切的行为,并且它不会影响服务器创建的单例。它将始终使用 null 创建 listaAtivos 的新实例。
我正在制作一个由中央服务器(如 DNS)控制的多个服务器和客户端的程序,该程序的操作是:
中央服务器启动名为
Servidor_Borda
另一台服务器在
Servidor_Borda
中连接,您的 IP 保存在数组列表中。当客户端想要连接时,他需要去 Servidor_Borda 并接收一个有效的 IP 来连接。
我的问题是当客户端请求 IP 连接时 ArrayList
总是空的,我不能做一个唯一的数组。
public class Servidor_Borda {
public static void main(String args[]) throws IOException{
int porta = 4004;
try{
ServerSocket serverSocket = new ServerSocket(porta);
Socket socketConexao;
System.out.print("Aguardando conexões...\n");
while(true){
socketConexao = serverSocket.accept();
String ip = socketConexao.getInetAddress().getHostAddress();
listaAtivos.getInstance().addServidor(ip);
TrataConexao trataC = new TrataConexao(socketConexao);
new Thread(trataC).start();
}
}catch(Exception e){
System.out.print("Porta em uso!");
}
}
}
public class listaAtivos {
private static listaAtivos singleton = null;
private ArrayList<String> servidoresConectados;
private listaAtivos(){
servidoresConectados = new ArrayList<>();
}
public static listaAtivos getInstance(){
if(singleton==null){
singleton = new listaAtivos();
}
return singleton;
}
public void addServidor(String ip){
servidoresConectados.add(ip);
exibeAtivos();
}
public String escolheServidor(){
int tam = servidoresConectados.size();
if(tam != 0){
for(int i=0;i<tam;i++){
String ip = servidoresConectados.get(i);
return ip;
}
}
return null;
}
}
public class Cliente {
public static void main(String args[]){
int porta = 4008;
String ip = listaAtivos.getInstance().escolheServidor();
Socket s = new Socket(ip,porta);
}
}
您的服务器 运行 在 4004 端口上,但您正在尝试从 4008 中的客户端访问连接。因此连接永远不会完成,因此 serverSocket.accept()
被阻止并等待永远处于阻塞状态。请在下面找到 link 了解详细信息。
http://download.java.net/jdk7/archive/b123/docs/api/java/net/ServerSocket.html#accept%28%29
但是由于您是 运行 来自另一个控制台的客户端程序,因此无法实现确切的行为,并且它不会影响服务器创建的单例。它将始终使用 null 创建 listaAtivos 的新实例。