Próbuję napisać program serwera w C, używając innego klienta, pojawia się ten błąd, gdy próbuję połączyć się na przykład przez port 2080.
connection refused
Jakie mogą być przyczyny tego błędu?
c
sockets
connection-refused
Zenet
źródło
źródło
ping
, downforeveryoneorjustme.com pokazał, że to nie tylko ja i nadal mogę uzyskać do niego dostęp przez FTP. Po kilku minutach błędy zostały naprawione.connect()
zależy od konkretnego adresu IP i portu, który jest gotowy do użycia.Odpowiedzi:
Powodów może być wiele, ale najczęściej są to:
Port nie jest otwarty na komputerze docelowym.
Port jest otwarty na maszynie docelowej, ale zaległości oczekujących połączeń są pełne.
Zapora sieciowa między klientem a serwerem blokuje dostęp (sprawdź także zapory lokalne).
Po sprawdzeniu zapory i czy port jest otwarty, użyj telnetu, aby połączyć się z IP / portem, aby przetestować łączność. Spowoduje to usunięcie wszelkich potencjalnych problemów z aplikacji.
źródło
Błąd oznacza, że system operacyjny gniazda nasłuchującego rozpoznał żądanie połączenia przychodzącego, ale zdecydował się celowo je odrzucić.
Zakładając, że pośrednia zapora ogniowa nie przeszkadza, są tylko dwa powody (o których wiem), dla których system operacyjny odrzuca żądanie połączenia przychodzącego. Jeden powód był już kilkakrotnie wspominany - port nasłuchu, do którego jest podłączony, jest zamknięty.
Jest jeszcze jeden powód, o którym jeszcze nie wspomniano - port nasłuchujący jest faktycznie otwarty i aktywnie używany, ale jego zaległości w kolejce żądań połączeń przychodzących osiągnęły maksimum, więc nie ma miejsca na kolejkowanie żądań połączeń przychodzących za chwilę. Kod serwera nie wywołał jeszcze wystarczająco dużo razy accept (), aby zakończyć czyszczenie dostępnych miejsc dla nowych elementów kolejki.
Poczekaj chwilę i spróbuj ponownie nawiązać połączenie. Niestety, nie ma sposobu, aby odróżnić „port nie jest w ogóle otwarty” od „port jest otwarty, ale jest teraz zbyt zajęty”. Oba używają tego samego ogólnego kodu błędu.
źródło
Jeśli spróbujesz otworzyć połączenie TCP z innym hostem i zobaczysz komunikat o błędzie „Odmowa połączenia”, oznacza to, że
RST jest bitem w pakiecie TCP, który wskazuje, że połączenie powinno zostać zresetowane. Zwykle oznacza to, że inny host odebrał twoją próbę połączenia i aktywnie odrzuca twoje połączenie TCP, ale czasami interweniująca zapora może zablokować twój pakiet TCP SYN i odesłać do ciebie TCP RST.
Zobacz https://tools.ietf.org/html/rfc793 strona 69:
źródło
Odmowa połączenia oznacza, że port, z którym próbujesz się połączyć, nie jest w rzeczywistości otwarty.
Więc albo łączysz się z niewłaściwym adresem IP, albo z niewłaściwym portem, albo serwer nasłuchuje na niewłaściwym porcie, albo w rzeczywistości nie działa.
Częstym błędem jest nieokreślanie numeru portu podczas wiązania lub łączenia w sieciowej kolejności bajtów ...
źródło
Sprawdź po stronie serwera, czy nasłuchuje na porcie 2080. Najpierw spróbuj to potwierdzić na serwerze, wysyłając telnet do tego portu:
telnet localhost 2080
Jeśli słucha, jest w stanie odpowiedzieć.
źródło
1.Sprawdź stan serwera.
2.Sprawdź stan portu.
Na przykład 3306
netstat -nupl|grep 3306
.3.Sprawdź swoje zapory. Na przykład dodaj 3306
źródło
Chociaż nie wydaje się, aby tak było w Twojej sytuacji, czasami błąd odmowy połączenia może również wskazywać, że w Twojej sieci występuje konflikt adresów IP. Możesz wyszukać możliwe konflikty IP, uruchamiając:
i
To pytanie AskUbuntu zawiera również więcej informacji.
źródło
Z punktu widzenia zapory Checkpoint, jeśli faktycznie wybierzesz opcję Odrzuć jako działanie, zobaczysz komunikat z zapory ogniowej, ujawniając w ten sposób potencjalnemu atakującemu obecność zapory przed serwerem. Zapora po cichu porzuca wszystkie połączenia, które nie są zgodne z zasadami. Odmowa połączenia prawie zawsze pochodzi z serwera
źródło
Ten sam problem występuje z komputerem w pracy. Problem polega na tym, że kiedy wpisujesz localhost, idzie on na adres proxy, a nie na adres lokalny, powinieneś go ominąć, wykonaj następujące kroki
Chrome => Ustawienia => Zmień ustawienia proxy => Ustawienia LAN => zaznacz Omiń serwer proxy dla adresów lokalnych.
źródło
W Ubuntu spróbuj
sudo ufw allow <port_number>
zezwolić zaporze ogniowej na dostęp zarówno do serwera, jak i bazy danych.źródło
Spróbuj przekazać parametr portu „-p”:
źródło
W moim przypadku dzieje się tak, gdy strona jest zablokowana w moim kraju i nie używam VPN. Na przykład, gdy próbuję uzyskać dostęp do vimeo.com z Indonezji, która jest zablokowana.
źródło
Miałem tę samą wiadomość z zupełnie inną przyczyną:
wsock32.dll
nie znaleziono.::socket(PF_INET, SOCK_STREAM, 0);
Wezwanie przechowywane zwrócenieINVALID_SOCKET
ale powodem było to, że winsock dll nie został załadowany.W końcu uruchomiłem monitor procesów Sysinternals i zauważyłem, że szukał biblioteki dll „wszędzie”, ale jej nie znalazłem.
Ciche porażki są świetne!
źródło