Napisałem 2 programy w Pythonie 2.7. Jeden tworzy gniazdo hosta, a drugi tworzy gniazdo klienta. Następnie próbują się połączyć. Miałem program hosta na moim komputerze i umieściłem program klienta w telefonie, który był połączony z siecią WIFI w tej samej sieci, co mój komputer. Ustawiłem program klienta (w moim telefonie, który jest w mojej sieci LAN), aby połączyć się z lokalnym adresem IP mojego komputera. Sprawdziłem błędy w moim kodzie i okazało się, że jest bezbłędny. Jednak kiedy próbowałem go uruchomić, otrzymałem bardzo dziwne zachowanie:
- Port jest poprawny. Nazwa hosta jest poprawna. Próbuję się połączyć. Nic się nie dzieje. Nie nawiązano połączenia.
- Zresetowałem komputer.
- Próbuję jeszcze raz. Ten sam wynik.
- Wyłączam zarówno moją lokalną, jak i publiczną zaporę.
- Teraz coś dostaję, ale tylko na moim urządzeniu klienckim: [Errno 111] Połączenie odrzucone.
- Włączam ponownie zapory ogniowe.
- Taki sam wynik jak w 1. (brak połączenia)
- Uruchomię program hosta na moim laptopie. Próbuję się połączyć. To działa!
- Zresetowałem router i ponownie uruchomiłem program hosta na komputerze. Taki sam wynik jak w 1.
- Teraz uruchamiam program klienta również na moim komputerze, podłączając go do „localhost”. To działa.
Robię to samo, co w przypadku 10. ustawienia programu klienta, aby ponownie łączył się z lokalnym adresem IP mojego komputera. Błąd:
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
W 6. Doszedłem do wniosku, że problem jest związany z komputerem i że moje programy działają poprawnie.
Niektóre intele:
- Windows 7 na PC i laptopie.
- Używam Pythona 2.7.
- Laptop i smartfon są podłączone do sieci za pośrednictwem WIFI, komputera za pomocą kabla.
- Próbowałem różnych portów, aby upewnić się, że nie stanowią problemu.
prawdopodobnie nie tak istotne, ale tutaj jest kod dla hosta i klienta http://pastebin.com/raw/wswMi5SV
Co się dzieje?
Odpowiedzi:
Obecnie jesteś związany z
localhost
który jest tylko interfejsem wewnętrznym. Programy, które się wiążą127.0.0.1
nie są dostępne w sieci, jest to zgodne z projektem. Można to zobaczyć, gdy otrzymasz „połączenie odrzucone”, gdy łączysz się z zaporą w dół. Kiedy wyślesz TCP SYN do zamkniętego portu system operacyjny odeśle a TCP RST z powrotem do klienta, aby wskazać, że port jest zamknięty.Kiedy mówisz wiążące
0.0.0.0
nie działa, czy możesz być bardziej szczegółowy? Jak to się nie udaje?Jedna rzecz, którą możesz wypróbować, to:
Jeśli dobrze pamiętam, spróbuje powiązać wszystkie dostępne interfejsy. Nie jestem pewien, co próbowałeś wcześniej, ale powinno to rozwiązać Twój problem.
źródło