Eu escrevi 2 programas em Python 2.7. Um cria um soquete de host enquanto o outro cria um soquete de cliente. Então eles tentam se conectar. Eu tinha meu programa host no meu PC e coloquei meu programa cliente no meu telefone que estava conectado ao WIFI na mesma rede do meu PC. Defino o programa cliente (no meu telefone, que está na minha LAN), para conectar ao endereço IP local do meu PC. Eu verifiquei se há falhas no meu código e descobri que é impecável. No entanto, quando tentei executá-lo, tive um comportamento muito estranho em troca:
- A porta está correta. O nome do host está correto. Eu tento conectar. Nada acontece. Nenhuma conexão é estabelecida.
- Eu redefinir meu PC.
- Eu tento de novo. Mesmo resultado.
- Eu desligo meu firewall local e público.
- Agora eu recebo algo, mas apenas no meu dispositivo cliente: [Erro 111] Conexão recusada.
- Eu ligo meus firewalls novamente.
- Mesmo resultado que em 1. (sem conexão)
- Eu executo o programa host no meu laptop. Eu tento conectar. Funciona!
- Reinicializo meu roteador e executo meu programa host no PC novamente. Mesmo resultado que em 1.
- Agora, também executo o programa cliente no meu PC, conectando-o ao "localhost". Funciona.
Eu faço o mesmo que em 10. configurando o programa cliente para conectar-me novamente ao endereço IP local do meu PC. Erro:
Traceback (most recent call last): File "<pyshell#5>", line 1, in <module> s.connect(cn) File "C:\Python27\lib\socket.py", line 224, in meth return getattr(self._sock,name)(*args) error: [Errno 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
Em 6. Cheguei à conclusão de que o problema está relacionado ao PC e que meus programas funcionam bem.
Alguns intels:
- Windows 7 em PC e laptop.
- Estou usando o Python 2.7.
- Laptop e smartphone são conectados à rede via Wi-Fi, PC via cabel.
- Tentei portas diferentes para garantir que não fossem o problema.
provavelmente não é relevante, mas aqui está o código para o host e o cliente http://pastebin.com/raw/wswMi5SV
O que está acontecendo?
Respostas:
No momento, você está vinculando
localhost
apenas uma interface interna. Os programas vinculados a127.0.0.1
não são acessíveis pela rede, isso ocorre por design. Isso pode ser visto quando você recebe uma "conexão recusada" quando se conecta ao firewall desativado. Quando você envia um TCP SYN para uma porta fechada, o sistema operacional envia um TCP RST de volta ao cliente para indicar que a porta está fechada.Quando você diz que a ligação ao
0.0.0.0
não funcionou, pode ser mais específico? Como isso falha exatamente?Uma coisa que você pode tentar é:
Se bem me lembro, isso tentará vincular a todas as interfaces disponíveis. Não sei ao certo o que você tentou anteriormente, mas isso deve resolver seu problema.
fonte