Ir ao conteúdo

Posts recomendados

Postado

Olá
Estou com um problema num programa que realiza um chat com um RMI com Callback
Tanto o servidor e o cliente não compilam e eu já tentei de tudo para resolver isso.

Segue em anexo o código do servidor, do cliente e das interfaces junto com o erro que dá na hora da compilação.

Código do servidor

import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;
import java.util.Scanner;

public class Server extends UnicastRemoteObject implements IIncrementa{

        public String text;
        Scanner ler;
        public Server() throws RemoteException{
                ler = new Scanner(System.in);
        }
        public static void main (String args[]){
        try{
                LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
                Server obj_server = new Server();
                Naming.rebind("rmi://127.0.0.1/Incrementa", obj_server);
        }catch(Exception e){
                System.out.println("Erro no servidor"+e);
        }
 }
        public void inc (IClient obj_Client, String msg) throws RemoteException{
                System.out.println("Mensagem vinda do cliente: "+msg);
                System.out.println("Digite uma mensagem: ");
                text = ler.nextLine();
                obj_client.callClient(text);
        }
}

Código do cliente

import java.rmi.*;
import java.rmi.server.*;
import java.rmi.Scanner;

public class Client extends UnicastRemoteObject implements IClient{
        String text;

        public Client(String host) throws RemoteException{
                try{
                IIncrementa obj = (IIncrtementa) Naming.lookup("rmi://"+host+"/Incrementa");
                while(true){
                System.out.println("Digite uma mensagem: ");
                text = ler.nextLine();
                obj.inc(this, text);
                }
        }catch(Exception e){
                System.out.println("ERRO NO CONSTRUTOR!!!!!"+e);
                }
        public void callClient(String msg_cli) throws RemoteException{
                System.out.println("Mensagem do server: "+msg_cli);
        }
        public static void main (String args[]){
                try{
                Client obj_cli = new Client(args[0]);
                }catch(Exception e){
                        System.out.println("Erro no cliente"+e);
                }
        }
        }
}

Código da interface 1

import java.rmi.*;

public interface IIncrementa extends Remote{

        public String chat (String msg) throws RemoteException; //método que será acessado pelo cliente, somente declaração!

}

Código da interface 2

import java.rmi.*;
interface IClient extends Remote{
        public void callClient (String msg_cli) throws RemoteException;
}

Os erros que dão na hora de compilar:

Do Cliente:

image.png.849e79f7ef91cad14a5c5703e64859c5.png

 

Do Servidor:

image.thumb.png.a3f74f8d8cdfd732b0b9706c30aa6c9a.png

Postado

A classe Client está com problema nas chaves. Verifique onde você abre e onde você fecha cada uma delas.

 

Dica: Procure dar mais atenção à organização do seu código. Um código bonito e organizado facilita a leitura e ajuda a prevenir esses tipos de problema.

 

 

A classe Server está tentando acessar um objeto que não existe. Além disso, a classe implementa uma interface, mas não está implementando os métodos dessa interface.

 

Quando uma interface é implementada, todos os métodos abstratos dela devem ser implementados na classe concreta.

  • 2 semanas depois...
Postado
Em 29/06/2022 às 17:36, AdrianoSiqueira disse:

A classe Client está com problema nas chaves. Verifique onde você abre e onde você fecha cada uma delas.

 

Dica: Procure dar mais atenção à organização do seu código. Um código bonito e organizado facilita a leitura e ajuda a prevenir esses tipos de problema.

 

 

A classe Server está tentando acessar um objeto que não existe. Além disso, a classe implementa uma interface, mas não está implementando os métodos dessa interface.

 

Quando uma interface é implementada, todos os métodos abstratos dela devem ser implementados na classe concreta.

Olá desculpe a demora

Ajeitei um pouco o Client, o Server e as interfaces como mostra abaixo.

O Server:

import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;
import java.util.Scanner;

public class Server extends UnicastRemoteObject implements IIncrementa{

        public String text;
        Scanner ler;

        public Server() throws RemoteException{
                ler = new Scanner(System.in);
        }
        public static void main (String args[]){

        try{
                LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
                Server obj_server = new Server();
                Naming.rebind("rmi://127.0.0.1/Incrementa", obj_server);
        }catch(Exception e){
                System.out.println("Erro no server"+e);
        }
        }
        //public void inc (IClient Obj_client, String msg) throws RemoteException{
        public String chat (String msg) throws RemoteException{
                System.out.println("Mensagem do Cliente: "+msg);
                System.out.println("Digite uma Mensagem: ");
                text = ler.nextLine();
                return text;
        }
}

O Client:

import java.rmi.*;
import java.rmi.server.*;
import java.util.Scanner;

public class Client extends UnicastRemoteObject implements IClient{
//public class Client{
        String text;

        public Client(String host) throws RemoteException{
                try{
                IIncrementa obj = (IIncrementa) Naming.lookup("rmi://"+host+"/Incrementa");
                        Scanner ler = new Scanner(System.in);
                        //obj.chat2(this);
                        while(true){
                        System.out.println("Digite uma mensagem: ");
                        text = ler.nextLine();
                        //obj.inc(this, texto);
                        //obj.chat2(this);
                        }
                }catch(Exception e){
                        System.out.println("Erro no construtor"+e);
                }
        }
        public void callClient(String msg_cli) throws RemoteException{
                System.out.println("Mensagem do Server: "+msg_cli);
        }
        public static void main (String args[]){
                try{
                Client obj_cli = new Client(args[0]);
                }catch(Exception e){
                        System.out.println("Erro no cliente"+e);
                }
                }
}

Interface 1:

import java.rmi.*;

public interface IIncrementa extends Remote{

        public String chat (String msg, String chat2) throws RemoteException; //método que será acessado pelo cliente, somente declaração!

}

Interface 2:

import java.rmi.*;
interface IClient extends Remote{
        public void callClient (String msg_cli) throws RemoteException;
}

Então na minha visão o Client já está com o callback incluso, gostaria de saber como eu posso colocar o callback no Server.

Postado

Basta criá-lo com a mesma assinatura da interface.

 

Por exemplo, se na interface está assim:

void chat(String x);

 

Na classe Server deve estar assim:

public void chat(String x) {
}

 

Se na interface está assim:

void chat(String a, String b);

 

Na classe Server deve estar assim:

public void chat(String a, String b) {
}

 

O tipo de retorno, o nome do método e o tipo dos parâmetros devem coincidir com o que foi declarado na interface. Já o nome dos parâmetros não importa, podendo ser qualquer coisa, respeitando o padrão de nomenclatura do Java.

Postado
3 horas atrás, AdrianoSiqueira disse:

Basta criá-lo com a mesma assinatura da interface.

 

Por exemplo, se na interface está assim:

void chat(String x);

 

Na classe Server deve estar assim:

public void chat(String x) {
}

 

Se na interface está assim:

void chat(String a, String b);

 

Na classe Server deve estar assim:

public void chat(String a, String b) {
}

 

O tipo de retorno, o nome do método e o tipo dos parâmetros devem coincidir com o que foi declarado na interface. Já o nome dos parâmetros não importa, podendo ser qualquer coisa, respeitando o padrão de nomenclatura do Java.

Então seria assim?

 public String chat (String msg, String chat2) throws RemoteException{

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!