Às vezes, meu cliente não pode acessar meu servidor.
Quando isso acontece, no meu servidor, posso manualmente ping
o cliente
e agora o cliente pode ver o servidor.
Minha pergunta: O que pode ser feito para corrigi-lo, sem usar ping
?
Eu realmente espero que você possa ajudar a esclarecer este problema esporádico.
Em um dia ruim acontece até 5 vezes. Em um bom dia, talvez 1 hora.
Em um dia realmente bom, não há problemas, mas é raro.
Estou desenvolvendo meu projeto de tempo livre que é um aplicativo iOS com um servidor c ++.
Isso deve ser feito em código aberto em algum momento.
Sobre minha configuração
O servidor e o cliente estão no mesmo wifi.
Ambos os dispositivos podem abrir www.google.com
em um navegador para que eles tenham acesso à Internet.
Servidor
macOS version 10.11.6 - El Capitan
NGINX version 1.10.0
IP address: 192.168.0.13 (proxy disabled)
The server is not connected to the router via cable.
The NGINX server is running on port 12345 and controls a FastCGI script.
Link para minha configuração do NGINX e hostname, ifconfig, resolv .
Cliente
iPad Pro (I'm also experiencing the same problem with my iPhone)
iOS 9.3.5 (13G36)
IP address: 192.168.0.18 (proxy disabled)
The client is not connected to the server via cable.
Roteador
Netgear CG3000, hardware version 1.04, software version 3.9.21.13.mp3.V1.32.02
I'm experiencing the same problem with other routers, can't remember which ones.
Nada escrito no log de eventos do roteador.
Etapas para reproduzir
Eu passo por essas etapas.
Etapa 1: o cliente não consegue acessar o servidor
No cliente:
Em um navegador, digito o IP e a porta do servidor: http://192.168.0.13:12345/status
Mas nada acontece. O cliente não pode acessar o servidor.
O cliente pode acessar a internet muito bem.
Etapa 2: cliente de ping do servidor - faz com que as coisas funcionem
No servidor:
Eu ping
o cliente pelo seu endereço IP, como este
PROMPT> ping 192.168.0.18
PING 192.168.0.18 (192.168.0.18): 56 data bytes
64 bytes from 192.168.0.18: icmp_seq=0 ttl=64 time=102.210 ms
64 bytes from 192.168.0.18: icmp_seq=1 ttl=64 time=102.966 ms
64 bytes from 192.168.0.18: icmp_seq=2 ttl=64 time=21.176 ms
^C
--- 192.168.0.18 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 21.176/75.451/102.966/38.379 ms
PROMPT>
Esse comando ping
faz com que o cliente consiga acessar o servidor.
Por que ping
faz isso funcionar?
Etapa 3: o cliente agora pode acessar o servidor
No cliente:
Em um navegador, digito o IP e a porta do servidor: http://192.168.0.13:12345/status
Agora recebo uma resposta do servidor. Funciona.
Se eu iniciar um proxy e interceptar o tráfego, a solicitação / resposta será assim:
pedido
GET /status HTTP/1.1
Host: 192.168.0.13:12345
Accept-Encoding: gzip, deflate
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (iPad; CPU OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G36 Safari/601.1
Accept-Language: da-dk
Cache-Control: max-age=0
Connection: keep-alive
resposta
HTTP/1.1 200 OK
Server: nginx/1.10.0
Date: Sun, 04 Sep 2016 16:11:39 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
{
"request_index": 1047,
"time": "1473005499"
}