Remote method invocation de port en cours d'utilisation
J'ai créé un Serveur, un Client type de programme avec le RMI. Mais à chaque fois que je lance mon Serveur après le démarrage du rmiregistry à partir de l'invite de commande, le port est déjà utilisé d'erreur est levée. Ses seulement moi qui a commencé le rmiregistry. J'ai vérifié la commande netstat.
Code Serveur:
public class Server implements Runnable, Linker{
private static Server server = null;
private static Linker l = null;
private String name = null;
public Server(){}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void run(){
while(!("Andy").equalsIgnoreCase(name)){
}
}
public static void createStub(){
try{
server = new Server();
l = (Linker) UnicastRemoteObject.exportObject(server, 1099);
Registry registry = LocateRegistry.getRegistry();
registry.bind("Link", l);
System.out.println("Ready");
}
catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) {
//TODO Auto-generated method stub
createStub();
Thread t = new Thread(server);
}
}
Code Client:
public class Client implements Runnable{
private Scanner sc = new Scanner(System.in);
private Linker linker = null;
public void loadStub(){
try{
Registry registry = LocateRegistry.getRegistry(1099);
linker = (Linker) registry.lookup("Link");
}catch(Exception e){
}
}
public void run(){
String ip = null;
while(sc.hasNext()&&!(ip = sc.nextLine()).equalsIgnoreCase(":q")){
try {
linker.setName(ip);
} catch (RemoteException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String...args){
Client client = new Client();
client.loadStub();
Thread t = new Thread(client);
t.start();
}
}
Exception:
java.rmi.server.ExportException: Port already in use: 1099; nested exception is:
java.net.BindException: Address already in use: JVM_Bind
OriginalL'auteur Andrews | 2011-12-01
Vous devez vous connecter pour publier un commentaire.
La
rmiregistry
utilise le port 1099 dans son processus de sorte que vous ne pouvez pas l'utiliser dans le vôtre. Soit:LocateRegistry.createRegistry()
(de préférence).rmiregistry
sur un autre port autre que le port 1099.OriginalL'auteur user207421
Si vous utilisez mac os, vous pouvez arrêter de port suivants:
Première chose que vous devez trouver le PID_number:
lsof -i :1099
Et puis tuer ce port:
kill -9 PID_number
OriginalL'auteur Tai Le
Utiliser ce code Serveur -
Est-il possible de faire sans exceptions? stackoverflow.com/q/14982760/897090
Comme je l'ai dit dans la question que vous avez cité, non.
OriginalL'auteur anirudha mundada
Re-vérifier si le port 1099 n'est pas utilisé par un autre processus ou de l'utilisateur ou de démarrer le rmiregistry sur un autre port.
OriginalL'auteur Gaurav
Ps -aef |grep rmiregistry.
trouver le pid rmiregistry utilisation.
Tuer le pid
Den exécuter le serveur de nouveau...!!!!
OriginalL'auteur user3796191
Essayez ceci:
OriginalL'auteur Arif Acar