Acessando o host local do PC a partir do dispositivo móvel Android conectado por USB

86

Eu tenho um dispositivo Android (guia Samsung galaxy) conectado ao meu PC via USB.

Quero usar WebServices e executar uma página da web que está localizada no servidor xampp local do meu PC no meu dispositivo Android.

Posso alcançá-lo se tiver ambos, meu PC e o dispositivo Android, conectados na mesma rede sem fio.

No entanto, é possível acessar a página localhost sem qualquer conexão sem fio, usando apenas a conexão USB.

(PS: Este mesmo cenário funciona quando executo o aplicativo em um emulador e uso o ip 10.0.2.2 para acessar o localhost no meu PC)

saurabh
fonte
Por favor, use o link abaixo stackoverflow.com/questions/4779963/… Funcionou para mim.
1
Desligue o firewall enquanto testa sua página da web ou adicione seu ip às redes confiáveis ​​nas configurações do firewall.
Zeeali
confira este blog mycodingchannel.in/blog/… para detalhes
kontashi35

Respostas:

34

Eu finalmente resolvi esse problema. Usei Samsung Galaxy S com Froyo. A "porta" abaixo é a mesma que você usa para o emulador (10.0.2.2:port). O que eu fiz:

  1. primeiro conecte seu dispositivo real com o cabo USB (certifique-se de que você pode carregar o aplicativo em seu dispositivo)
  2. obtenha o endereço IP do dispositivo conectado, que começa com 192.168.xx: porta
  3. abra o "Centro de Rede e Compartilhamento"
  4. clique em "Conexão de área local" no dispositivo e escolha "Detalhes"
  5. copie o "endereço IPv4" para seu aplicativo e substitua-o como: http://192.168.x.x:port/test.php
  6. carregue seu aplicativo (novamente) para seu dispositivo real
  7. vá para propriedades e ative o "tethering USB"
  8. execute seu aplicativo no dispositivo

Agora deve funcionar.

Zsivics Sanel
fonte
Se eu fizer isso, recebo uma exceção de host desconhecida.
AaronF
4
Parece que esta resposta, enquanto funciona, assume que o dispositivo Android e o computador estão ambos conectados a um ponto de acesso sem fio, o que é contrário ao que o autor está tentando alcançar.
Jacob
2
Deve-se observar que esta é uma solução somente para Windows.
dotnetCarpenter
2
Concordo com @Jacob, isso não responde à pergunta. A própria questão afirma que ele pode se conectar por wi-fi.
bradlis7
1
Isso não responde à pergunta. Esta é a resposta certa: stackoverflow.com/a/53920173/2947592
wvdz
44

O Google postou uma solução para esse tipo de problema aqui .

Os passos:

  • Conecte seu dispositivo Android e sua máquina de desenvolvimento com depuração USB habilitada
  • Abra o Chrome em sua máquina de desenvolvimento, abra uma nova guia, clique com o botão direito na nova guia do navegador, clique em inspecionar
  • Clique no ícone de três pontos no lado superior direito três pontos, -> Mais Ferramentas, Dispositivos Remotos.
  • Olhe para a parte inferior da tela e certifique-se de que o nome do seu dispositivo aparece na lista com um ponto verde.
  • Veja abaixo a parte de configurações, verifique a marca de encaminhamento de porta
  • Adicionar regra. Por exemplo, se seu servidor web python está sendo executado em sua máquina localhost: 5000 e você deseja acessá-lo a partir da porta 3333 do seu dispositivo, digite 3333na parte esquerda, digite localhost:5000e clique em adicionar regra.
  • Voila, agora você pode acessar seu servidor web a partir de seu dispositivo. Tente abrir uma nova guia do navegador e visite http: // localhost: 3333 em seu dispositivo
Alfat Saputra Harun
fonte
Funciona conforme anunciado. Também é possível manter as portas no dispositivo e na máquina da mesma forma :). (Não sei por que você deseja usar outra porta no dispositivo)
Ralf de Kleine
Esta deve ser a resposta aceita. Se você estiver usando um certificado autoassinado para seu dev local, lembre-se de adicionar o protocolo SSL em Nova guia, por exemplo, localhost: 5000 . Funciona perfeitamente.
turrican_34
4
"Este painel foi preterido em favor da interface chrome: // inspect / # devices, que tem funcionalidade equivalente." Portanto, basta colar chrome://inspect/#devicesno cromo e pular para a etapa de encaminhamento de portas da resposta.
Craastad
Acabei de passar mais de uma hora tentando descobrir como fazer com que essas instruções funcionem ERR_EMPTY_RESPONSEvoltando do Chrome no dispositivo ... até que finalmente percebi que não estava executando meu servidor localhost em meu desktop e que não havia nada para realmente se conectar a! Doh! Iniciou o servidor (Apache neste caso) e tudo começou imediatamente a funcionar. Uma primeira etapa importante é certificar-se de que o servidor de destino esteja realmente em execução antes de configurar o encaminhamento de porta.
CubicleSoft
esta é a melhor solução
Raul Quispe
16

Eu li vários fóruns e tentei jogar aplicativos, mas não encontrei uma solução até agora.

Acredito que meu cenário seja semelhante ao seu, mas vou esclarecer para ajudar os outros. Tenho um site hospedado localmente e serviços da web para serem usados ​​por meu aplicativo Android. Preciso ter isso funcionando na estrada para demonstração, apenas com meu laptop e sem conexão de rede.

Nota: Usar meu iPhone como um ponto de acesso wi-fi e conectar meu pc e meu dispositivo Android funcionou, mas a conexão do iPhone 4S é lenta e caía regularmente.

Minha solução é a seguinte:

  • Desconecte os cabos de rede do PC e desligue o wi-fi.
  • Desligue o wi-fi no dispositivo Android
  • Conecte o Android ao PC via USB
  • Ative "Tethering USB" no menu do Android. (Em redes-> mais ...-> Tethering e hotspot portátil ")
  • Obtenha o IP do seu computador que foi atribuído pelo cabo USB. (abra o prompt de comando e digite "ipconfig" e procure o IP que o adaptador de rede USB atribuiu)
  • Abra um navegador no PC usando o endereço IP encontrado em vez de localhost para testar. iehttp://192.168.1.1/myWebSite
  • Abra um navegador no Android e teste se funciona
John
fonte
1
Tenho o Nexus 10 e não consigo fazer com que funcione para mim, mas preciso desesperadamente dele. Sem opção de tethering !?
Ludus H,
Também estou com um problema no moto g5s plus. Eu atribuo ainda não está funcionando.
Jigar Fumakiya
5

Aqui está um trecho do código do meu aplicativo Android:

Este aplicativo é capaz de se comunicar com um modelo get-post HTTP entre um servlet em execução em um servidor e um dispositivo Android conectado no modo depurável por USB ( porque o aplicativo estava em desenvolvimento ).

Também posso executar o aplicativo por Wi-Fi quando o servidor Tomcat Apache 7 estiver em execução ( quando o desenvolvimento do aplicativo for concluído ).

insira a descrição da imagem aqui

Para obter o seu endereço IP

  1. Vá para o Prompt de Comando
  2. Tipo ipconfig
  3. Pressione Enter

Na lista, o endereço IPv4 é o seu IP.

cagcak
fonte
Isso é impreciso. O modo depurável USB não fornece uma conexão de rede, nem os encaminhamentos ADB permitem que o dispositivo entre em contato com o PC. Aparentemente, você está usando uma conexão de rede via USB provavelmente fornecida por uma ferramenta de tethering, não pela depuração USB. Outra opção é criar um túnel ssh por meio de um ADB forward.
Chris Stratton
Eu não quis dizer que o modo depurável por usb fornece uma conexão de rede. Mas, infelizmente, essa era a única maneira de executar alguns comandos internos vindos de um projeto de aplicativo Android para o servidor da web incorporado ao Android Studio. Obrigado pela sua preocupação, pode ser confuso para novos desenvolvedores. Editado como o aplicativo em andamento de desenvolvimento no Android Studio.
cagcak
Ainda não há uma resposta aqui fornecendo um método para obter conectividade nesta direção. O "modo depurável por USB" não faz isso, portanto, sem uma descrição precisa de como você fez isso, não há solução aqui .
Chris Stratton
4

Fiz isso em um computador com Windows e funcionou perfeitamente!

Ligue o Tethering USB no seu celular. Digite ipconfig no prompt de comando em seu computador e encontre o ipv4 para "conexão de área local do adaptador ethernet x" (principalmente o primeiro). Agora vá para o navegador do seu celular, digite ipv4 com o número da porta do seu aplicativo web. por exemplo: - 192.168.40.142:1342

Funcionou com essas etapas simples!

Binu Jasim
fonte
4

Como acessar facilmente o LocalHost no dispositivo Android real -> Conecte seu PC com o dispositivo Android via USB

  1. Vá para a inspeção do Chrome, clique em 'f12' ou Control + Shift + C

Ferramenta de inspeção do Chrome

  1. Verifique a parte inferior da ferramenta de inspeção cromada.

  2. Agora vá para as configurações na guia Dispositivo remoto.

Guia Dispositivos Remotos

  1. marque a opção "Discover USB Device" e também a opção "Port Forwarding".

  2. Agora clique em Adicionar regras, digite qualquer porta de dispositivo, por exemplo (4880) e em endereço local, digite o endereço real do host local no meu caso, por exemplo (127.0.0.1:480)

  3. Depois de adicionar a regra, vá para o Android Studio -> dentro do URL do código ( http://127.0.0.1:4880 ). Lembre-se de alterar a porta de 480 -> 4880.

  4. Vá para a guia Dispositivo remoto no Chrome e clique no dispositivo conectado. Adicionar novo URL (127.0.0.1:4880) Inspecione o navegador Chrome do dispositivo Android

Verifique o navegador Chrome do dispositivo real e comece a depurar o código no dispositivo Android real.

Kader Hussain
fonte
1

Verifique as opções de tipo de conexão USB. Você deve ter um chamado "passagem de Internet". Isso permitirá que seu telefone use a mesma conexão do seu PC.

codemonkey
fonte
É a única forma que conheço de usar a conexão do PC via USB. Portanto, para o seu dispositivo, acho que a resposta é não. O simulador funciona porque compartilha a conexão do seu PC.
codemonkey
Eu sei que novos dispositivos HTC com Sense 3 têm a opção (Ex the Sensation)
codemonkey
muito obrigado pela ajuda. ainda para verificar se alguma das opções funciona.
saurabh
1

Gostei muito da resposta de John, mas gostaria de apresentá-la com algumas mudanças para aqueles que desejam testar alguma configuração cliente / servidor executando um cliente TCP no celular conectado por USB e um servidor no PC local.

Em primeiro lugar, é bastante óbvio que o 10.0.2.2 não funcionará porque este é um hardware REAL móvel e não um simulador.

Portanto, siga as instruções de John:

  • Desconecte todos os cabos de rede do PC e desligue o wi-fi.
  • Desligue o wi-fi no dispositivo Android
  • Conecte o dispositivo Android ao pc via USB
  • Ative o "Tethering USB" (Modem USB / Modem celular USB / USB שימוש כמודם סלולרי) no menu do Android. (Em redes-> mais ...-> Tethering e hotspot portátil ")

    • Esta conexão USB atuará como um servidor DHCP para sua única conexão de PC, então atribuirá ao seu PC um IP dedicado (dinâmico) em sua rede USB local. Agora tudo o que você precisa fazer é informar ao aplicativo cliente este IP e porta.
  • Obtenha o IP do seu PC (que foi atribuído pelo cabo tether USB.) (Abra o prompt de comando e digite "ipconfig", em seguida, procure o IP que o adaptador de rede USB atribuiu, no Linux ifconfigou "Informações de conexão" do Ubuntu, etc. ..)

  • Diga ao aplicativo para se conectar a esse IP (ou seja, 192.168.42.87) com algo como (Java - lado do cliente):

    String        serverIP      = "192.168.42.87";
    int           serverPort    = 5544;
    InetAddress   serverAddress = InetAddress.getByName(serverIP);
    Socket        socket         = new Socket(serverAddress, serverPort);
    ...
    

    Aproveitar..

JamesC
fonte
1

Olá, você pode acessar seu localhost xampp por

  1. Painel de controle ->
  2. firewall do Windows Defender ->
  3. Configuração avançada (no lado esquerdo) -> Regras de entrada -> Nova regra -> Porta -> na porta local específica, escreva suas portas Apache -> próximo -> em seguida, você pode acessar seu host local usando o PC local Endereço de IP:
user3285339
fonte
0

Conectando o telefone android via cabo USB e acessando o servidor http no computador.

  1. Firewall - desligue-o, assim que tudo funcionar, você pode adicionar uma regra nas regras de entrada, habilitar o servidor Apache HTTP (UDP e TCP) (ou qualquer servidor HTTP que você estiver usando) Aviso - se você desligar o firewall, seu computador ficará vulnerável a ataques na Internet. Portanto, desligue a Internet e desconecte-se da rede primeiro. Você não precisa estar na Internet para que isso funcione, pois você está conectando dois dispositivos na rede local.

  2. Conecte o cabo USB. Se a janela de rede for exibida, selecione Rede doméstica. Se ele não aparecer, provavelmente está definido como Público (o que não funciona), então vá para: Painel de Controle \ Rede e Internet \ Centro de Rede e Compartilhamento (no win7) e defina-o como Rede Doméstica lá. Ele pode mostrar a você uma próxima tela depois de pressioná-lo para compartilhar imagens, músicas ... basta clicar em cancelar. Na tela principal, a rede doméstica ainda estará ativa.

  3. Você precisa do IP do computador, localhost ou outros aliases não funcionam. Para obter o IP da sua máquina, inicie o shell da linha de comando do Windows (pressione a tecla Windows + R e digite cmd), a janela preta do prompt de comando deve aparecer, digite: "ipconfig" e pressione Enter. Agora procure

Endereço IPv4. . . . . . . . . . . : 192.168. ###. ### Esse é o IP que seu telefone atribuiu ao computador

  1. Agora você deve ter feito isso, no navegador do telefone, tente acessar um arquivo html de teste do servidor do seu computador que deve ser exibido corretamente.

  2. Agora que tudo está funcionando, você provavelmente desejará habilitar o firewall e o acesso à Internet em seu computador. Agora tente acessar seu servidor http novamente. Provavelmente não funcionará. Dependendo de sua configuração, você pode receber um pop-up solicitando que adicione uma regra para permitir isso, mas se não permitir, basta adicioná-la você mesmo. Inicie o firewall do Windows e vá para Regras de entrada (porque é um servidor) e adicione Nova regra. Selecione "Programa". Localize o exe do seu servidor http e, na próxima tela, certifique-se de que Permitir esteja selecionado. Tente se conectar novamente e agora deve funcionar. Se não, provavelmente é porque você selecionou o exe errado. Você pode ainda ir mais longe para restringir o uso externo (porque agora todos na Internet podem acessá-lo se tiverem seu endereço IP da Internet). Para restringir o acesso, você pode clicar com o botão direito do mouse na nova regra que acabou de criar,

    Nota para desenvolvedores Android, agora em seu código android, você tem que usar "http: //", caso contrário não funcionará. Por exemplo: MyAsyncTask.execute ("http://192.168.123.123/test.html")

Parte II - Configurando IP para fixo / estático.

Agora que as coisas estão funcionando, toda vez que você desconectar o cabo e conectá-lo novamente, seu IP mudará. E se você estiver usando em algum lugar como dentro de um código, você terá que atualizá-lo sempre! A solução que descobri é definir o IP como estático.

  1. Com o telefone conectado e amarrado, volte ao Centro de Rede e Compartilhamento e clique na conexão de Área Local "Conexões:"

captura de tela

  1. Na próxima tela, selecione Propriedades, realce IP 4 e pressione propriedades e clique em "Usar o seguinte endereço IP"
  2. Coloque o gateway padrão e a máscara de sub-rede exatamente como estavam no ipconfig e, para o endereço IP, altere apenas os últimos 3 dígitos para qualquer coisa de 1 a 255

captura de tela

Esse IP será seu novo IP fixo / estático e permanecerá o mesmo na próxima vez que você conectar o telefone.

Emil
fonte
0
  1. Certifique-se de ter o adb instalado no computador , a depuração USB habilitada no telefone e o telefone permitiu o acesso ao computador. Conecte o telefone ao computador via cabo USB e verifique se ele está visível (ele deve aparecer no comando Bash adb devices.
  2. No navegador Chrome do seu computador, abra chrome: // inspect / # devices , clique no botão "Port forwarding", marque "Enable port forwarding" e adicione a porta no computador que você deseja que seja acessível a partir do telefone ( instruções detalhadas aqui ). Você precisará manter aberta a guia executando chrome: // inspect / # devices.
  3. No navegador do seu telefone, navegue até localhost: [port_number], e ele deve exibir tudo o que está sendo executado no computador.

Isso funciona no Windows e no Ubuntu Linux e deve funcionar no Mac também.

Josh
fonte