Como acessar localhost de forma externa? [RESOLVIDO]

Olá pessoal!

Não sei se é aqui na divisão de “Desenvolvimento Web” do Guj que se posta a pergunta que irei fazer. Se não for, por favor me corrijam.

Seguinte, eu criei um Webservice tal qual exemplificado na página abaixo:

http://imasters.com.br/artigo/1863/java/web_services_in_java/

Esse link ajudou bastante. Graças a ele, consegui acessar o Webservice pelo caminho abaixo:

http://localhost:8080/axis/Calculator.jws?wsdl

Porém, queria acessá-lo externamente, de outra máquina, fazendo algo do tipo:

http://177.16.33.127:8080/axis/Calculator.jws?wsdl

Entendem? Digitando meu IP no lugar do localhost. Porém, não sei como fazer isso. Digitando o IP da minha máquina, que obtive naquele site do whatismyip, não funcionou.

Alguém sabe como devo proceder para conseguir acessar esse Webservice de outra máquina?

Olá,

para encontrar o teu IP, bastar abrir um terminal e digitar [i]ipconfig[/i] (MS-DOS) ou [i]ifconfig[/i] (gnome-terminal). É melhor você fixar o teu IP para que ele não altere os valores, caso esteja configurado para [i]obter o IP automaticamente[/i].

Opa, digitei ipconfig e funcionou.

Mas me diga, como eu fixo meu IP?

Acho que o IP que o ipconfig pega é o IP dado à máquina, via protocolo ARP, quando ela é ligada. Mas ele não deve ser fixo…

Você só consegue se sua máquina estiver dentro da mesma rede que a sua.

Se quiser fazer via internet, teria que contratar um provedor que tenha um IP público.

Então se eu for criar um Webservice para ser acessado em uma empresa, a única maneira do endereço IP desse Webservice ser “enxergado” na empresa é através de um provedor que forneça um IP público?

Se a empresa tiver uma rede própria e um servidor, todas as máquinas da rede da empresa poderão acessar o webservice. Isso pode ser inclusive bom para a segurança da empresa.

Se você quer acessar via internet, aí sim, precisa de um IP publico.

Obrigado pela ajuda, ViniGodoy.

Mudarei esse tópico para [RESOLVIDO].

[quote=ViniGodoy]Você só consegue se sua máquina estiver dentro da mesma rede que a sua.

Se quiser fazer via internet, teria que contratar um provedor que tenha um IP público.[/quote]

Primeiro, desculpa por ter ressuscitado o tópico, mas tenho a mesma dúvida do autor do tópico e acho que é melhor dar continuidade a este tópico do que começar outro do zero, para só então chegar ao ponto que quero chegar.

A minha dúvida é: eu não posso criar um provedor (de maneira fácil)?
Digo, a empresa em que faço estágio tem IP fixo, o computador onde está rodando o Glass Fish (onde está hospedado o web service) também tem IP fixo.
Como posso fazer para que o servidor do glass fish seja disponível para outros computadores na internet?

Eu nunca havia lidado com web service. Segui este tutorial, para fazer um teste:

O meu web service ficou assim:

[code]public class Teste {

@WebMethod(operationName = "getNome")
public String getNome(@WebParam(name = "ID") String ID) {
    String retorno; 
    
    try {
        Connection con;
        String url = "jdbc:postgresql://192.168.0.1:5432/Teste";
        String usuario = "admin";
        String senha = "senha123";

        Class.forName("org.postgresql.Driver");
        con = DriverManager.getConnection(url, usuario, senha);


        String cmd = String.format("SELECT Nome "
                + "FROM public.Funcionarios "
                + "WHERE ID = '%s'", ID);

        ResultSet rs;
        Statement st;
        st = con.createStatement();
        rs = st.executeQuery(cmd);
        rs.next();

        retorno = rs.getString(1);

    } catch (SQLException e) {
        retorno = e.toString();
    } catch (ClassNotFoundException e) {
        retorno = e.toString();
    }

    return retorno;
}

}[/code]

O cliente do web service ficou assim:

[code]public class Demo2 {

public static void main(String[] args) {
    
    Scanner scan = new Scanner(System.in);
    String id = scan.nextLine();
    
    services.Teste_Service service = new services.Teste_Service();
    services.Teste port = service.getTestePort();

    java.lang.String resultado = port.getNome(id);
    System.out.println("Result = " + resultado);
    
}

}[/code]

Pelo que reparei nos códigos gerados pelo Netbeans o endereço de busca do servidor é sempre http://localhost/ (que é o local definido nas configurações do meu Glass Fish).

Então, o programa só funciona no meu computador.

Se eu quiser que o programa funcione em qualquer computador na internet, como eu faria?

Se o IP dele é fixo, e é um IP de internet (não pode ser um IP fixo na rede interna), ele já está visível.

Caso contrário, você teria que configurar o NAT para redirecionar os pacotes vindos da porta que ele roda para ele. E aí, ele nem precisaria necessariamente de um IP fixo na rede interna.

Você precisa consultar o departamento de rede da sua empresa. Provavelmente você só poderá rodar o Glassfish para receber requisições da Internet em uma máquina que eles deixarem pública na Internet (em uma máquina que fique no “CPD” dessa empresa). Muitas vezes, por razoes de segurança, usam-se mais recursos, como um “proxy reverso” ou deixar apenas um Apache HTTP Server exposto na Internet, redirecionando os comandos para o seu Glassfish.

Pelo visto, tenho uma bela dor de cabeça pela frente, já que a empresa não tem um “departamento de rede” e eu sou praticamente o único programador da empresa - sim, um estagiário.
Acho que preciso arrumar um estágio melhor, em que as funções fiquem melhor definidas para cada cargo, já que aqui tenho que fazer o trabalho de analista, programador, DBA, admistrador de redes, etc.

Mas enfim, muito obrigado pelas respostas.

Consegui resolver o problema.

O que eu fiz foi:

Rodar o Glassfish em um computador em uma rede externa a do meu computador e deixar o web service hospedado lá.
Redirecionar a porta 8080 da rede onde o web service está hospedado para a porta 8080 do computador onde o web service está.

E então, no Netbeans, do meu computador, ao criar um cliente para web service, fui em WDSL URL e digitei:
http://123.456.789.99:8080/Demo1/Teste?wsdl

Ficando assim:

(Supondo que 123.456.789.99 seja o IP externo de onde está hospedado o web service)

A partir disso o Netbeans consegue localizar o web service e faz todas as configurações necessárias.

Obrigado aos que responderam. :slight_smile:

Vocês me ajudaram bastante.

Galera to com uma dúvida, eu tive que mudar pra porta 8080 o meu localhost, e agora não quer entrar com meu ip externo, sendo que já habilitei para que funcione com o ip, e toda vez que coloco meu ip ele vai para uma página onde tem IT Works, alguém poderia me ajudar??