未知主机RMI java

时间:2016-02-27 22:15:43

标签: java rmi unknown-host

尝试启动RMI服务器时出现unknown host错误 这里。错误是unknown host。实际上,我只是JAVA中RMI和套接字编程的初学者。你能给我一些教程吗? concerning my problem

我的界面代码:

package ApplicationServer;    
import java.io.File;
import java.rmi.RemoteException;
import java.sql.ResultSet;

public interface Méthodes {

    public String authentification(String login, String mdp) throws RemoteException;
    public ResultSet selection(String requete) throws RemoteException;
    public int miseAjour(String requete) throws RemoteException;
    public String envoyerFichier(File fichier) throws RemoteException;
}

在本课程中,我有我在程序中需要的所有方法:

package ApplicationServer;
import java.io.File;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Traitements extends UnicastRemoteObject implements Méthodes {

    private Connection cnx;
    private Statement stm;
    private ResultSet rst;
    private int rs;

    public void setCnx(Connection cnx) {
        this.cnx = cnx;
    }

    public void setStm(Statement stm) {
        this.stm = stm;
    }

    public void setRst(ResultSet rst) {
        this.rst = rst;
    }

    public void setRs(int rs) {
        this.rs = rs;
    }

    protected Traitements() throws RemoteException {
        super();
        // TODO Auto-generated constructor stub
    }

    @Override
    public String authentification(String login, String mdp) throws RemoteException {
        // TODO Auto-generated method stub
        try {

            setCnx(null);
            setStm(null);
            setRst(null);

            Class.forName("com.mysql.jdbc.Driver"); 
            cnx=DriverManager.getConnection("jdbc:mysql://localhost:3306/banque","root","");
            stm=cnx.createStatement();

            rst=stm.executeQuery("select md5('"+mdp+"');");
            while(rst.next()){
                mdp=rst.getString(1);
            }

            stm.clearBatch();
            stm=cnx.createStatement();
            setRst(null);
            String Query = "select * from utilisateurs where login like '"+login+"' and motdepasse like '"+mdp+"';"; 
            rst=stm.executeQuery(Query);

            int id = 0;
            String nm = null;
            String prm = null;

            while(rst.next()){
                id = rst.getInt("id");
                nm = rst.getString("nom");
                prm = rst.getString("prenom");  
            }
            if(id>0 && nm!=null && prm!=null){
                return id+" "+nm+" "+prm;   
            }
        }catch (SQLException | ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }  
        return null;
    }

    @Override
    public ResultSet selection(String requete) throws RemoteException {
        try{
            setCnx(null);
            setStm(null);
            setRst(null);

            Class.forName("com.mysql.jdbc.Driver"); 
            cnx=DriverManager.getConnection("jdbc:mysql://localhost:3306/banque","root","");
            stm=cnx.createStatement(); 
            rst=stm.executeQuery(requete);

        }catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
        catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return rst;
    }

    @Override
    public int miseAjour(String requete) throws RemoteException {
        try{
            setCnx(null);
            setStm(null);
            setRs(0);

            Class.forName("com.mysql.jdbc.Driver"); 
            cnx=DriverManager.getConnection("jdbc:mysql://localhost:3306/banque","root","");
            stm=cnx.createStatement(); 
            rs=stm.executeUpdate(requete);

        }catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
        catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return rs;
    }
    @Override
    public String envoyerFichier(File fichier) throws RemoteException {
        // TODO Auto-generated method stub
        return null;
    }

}

这是运行服务器的主类:

package ApplicationServer;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import javax.swing.JOptionPane;

public class Main {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
            int port=12345;
            String url="rmi://serveur:"+port+"/reference";      
            LocateRegistry.createRegistry(port);
            Traitements srv = new Traitements();
            Naming.rebind(url, srv);

            JOptionPane.showMessageDialog(null, "Serveur Lance :");

        } catch (RemoteException | MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    } 
}

1 个答案:

答案 0 :(得分:1)

您应该使用该代码中的真实主机名替换serveur

然而,绑定时在RMI URL中使用localhost要好得多。无论如何,注册表必须是主机本地的,所以没有必要使用其他任何东西。