#java #ftps
#c #сокеты #отказ в подключении
Вопрос:
Я пытаюсь написать серверную программу на C, используя другой клиент, я получаю эту ошибку, когда пытаюсь подключиться, например, через порт 2080.
connection refused
Каковы могут быть причины этой ошибки?
Комментарии:
1. Я только что получил эту ошибку из-за ошибки сервера, на котором я размещаю свой веб-сайт. Сервер все еще может быть
ping
отредактирован, downforeveryoneorjustme.com показал, что это не только я, и я все еще могу получить к нему доступ через FTP. Через пару минут ошибки были устранены.2. @moose: ping не сообщает вам, доступен ли конкретный порт для прослушивания рекламы, только доступен ли IP-адрес. Но
connect()
зависит от конкретного IP и готовности порта к использованию.3. Ошибка сервера имеет канонический вопрос о отказе в соединении .
4. Вот краткое объяснение отказа в соединении .
5. Я получил отказ в подключении в Ubuntu, потому что я пытался получить соединение на ‘localhost’, но ‘localhost’ не был правильно настроен на моем компьютере. Изменение ‘localhost’ на » (Python) решило проблему.
Ответ №1:
Причин может быть много, но наиболее распространенными являются:
-
Порт не открыт на компьютере назначения.
-
Порт открыт на компьютере назначения, но его список ожидающих подключений заполнен.
-
Брандмауэр между клиентом и сервером блокирует доступ (также проверьте локальные брандмауэры).
После проверки наличия брандмауэров и того, что порт открыт, используйте telnet для подключения к ip / порту для проверки подключения. Это устраняет любые потенциальные проблемы с вашим приложением.
Комментарии:
1. Брандмауэры обычно выдают ошибки тайм-аута, поскольку пакет connect (SYN) просто отбрасывается. Отказ в соединении вызван тем, что сервер получил и отклонил пакет SYN.
2. Не всегда, поскольку брандмауэры могут быть настроены на отклонение, а не отбрасывание пакетов.
3. подключение () с неправильной настройкой IP-адреса сервера и номера порта в клиентской программе также приведет к ошибке 111.
4. Кроме того: когда вам нужно получить доступ к https, но вы указали http:// … эта ошибка также может возникнуть.
5. @a’r Как бы вы узнали статус невыполненной работы?
Ответ №2:
Ошибка означает, что ОС прослушивающего сокета распознала запрос на входящее соединение, но решила намеренно отклонить его.
Предполагая, что промежуточный брандмауэр не мешает, есть только две причины (о которых я знаю), по которым ОС отклоняет запрос на входящее соединение. Одна из причин уже упоминалась несколько раз — порт прослушивания, к которому подключается, не открыт.
Есть еще одна причина, которая еще не была упомянута — порт прослушивания фактически открыт и активно используется, но его отставание от запросов на входящее соединение в очереди достигло максимума, поэтому в данный момент нет свободного места для запроса на входящее соединение в очереди. Серверный код еще не вызывал accept() достаточно раз, чтобы завершить очистку доступных слотов для новых элементов очереди.
Подождите минуту или около того и повторите попытку подключения. К сожалению, нет способа провести различие между «порт вообще не открыт» и «порт открыт, но сейчас слишком занят». Они оба используют один и тот же общий код ошибки.
Комментарии:
1. Есть также один крайний случай, как описано здесь: softlab.ntua.gr/facilities/documentation/unix/unix-socket-faq / … . в принципе, если вы проводите стресс-тестирование своего клиент-серверного приложения и используете наивный подход, упомянутый в 3.6, может возникнуть ошибка «отказано в подключении», и она отличается от двух вышеупомянутых.
2. За это нужно проголосовать. Как только очевидная причина (ничего не прослушивается) устранена, это на самом деле наиболее вероятное объяснение, и его исправление может быть сложным делом.
3. если количество входящих запросов в очереди достигло максимума, как мы можем это исправить?
4. находится ли отставание в очереди по IP? Я попытался использовать telnet email-smtp.eu-west-1.amazonaws.com 25 из экземпляра EC2 и моего локального компьютера вызов telnet экземпляра EC2 выдает отказ в подключении, в то время как с моего локального компьютера он работает
5. «ничего не прослушивается», вероятно, вызвано тем, что компьютер включен, но сервер (программное обеспечение), например, Apache, не запущен.
Ответ №3:
Если вы пытаетесь открыть TCP-соединение с другим хостом и видите ошибку «Отказано в подключении», это означает, что
- Вы отправили TCP SYN-пакет на другой хост.
- Затем вы получили первый пакет TCP в ответ.
ПЕРВЫЙ бит в TCP-пакете, который указывает, что соединение должно быть сброшено. Обычно это означает, что другой хост получил вашу попытку подключения и активно отказывается от вашего TCP-соединения, но иногда промежуточный брандмауэр может заблокировать ваш пакет TCP SYN и отправить вам TCP RST обратно.
Смотрите https://www.rfc-editor.org/rfc/rfc793 страница 69:
SYN-ПОЛУЧЕННОЕ СОСТОЯНИЕ
Если установлен первый бит
Если это соединение было инициировано с пассивным ОТКРЫТИЕМ (т. Е. вышло из состояния ПРОСЛУШИВАНИЯ), то верните это соединение в состояние ПРОСЛУШИВАНИЯ и вернитесь. Пользователю не нужно сообщать. Если это соединение было инициировано с активным ОТКРЫТЫМ (т. Е. вышло из состояния СИНХРОНИЗАЦИИ), то соединение было отклонено, сообщите пользователю «соединение отклонено». В любом случае все сегменты в очереди повторной передачи должны быть удалены. И в активном ОТКРЫТОМ случае войдите в ЗАКРЫТОЕ состояние и удалите TCB и вернитесь.
Комментарии:
1. Отличный ответ. Это должно быть принято!
Ответ №4:
Отказ в подключении означает, что порт, к которому вы пытаетесь подключиться, фактически не открыт.
Итак, либо вы подключаетесь к неправильному IP-адресу, либо к неправильному порту, либо сервер прослушивает неправильный порт, либо фактически не запущен.
Распространенной ошибкой является не указание номера порта при привязке или подключении в сетевом порядке байтов…
Комментарии:
1. Это всего лишь одно из нескольких возможных условий, которые могут вызвать ошибку.
2. Порт может быть открыт, но эта ошибка все еще может возникнуть.
3. Сервер фактически не запущен — это очень распространенный сценарий в средах разработки, где команды уделяют больше внимания производственным серверам.
Ответ №5:
Проверьте на стороне сервера, что он прослушивает порт 2080. Сначала попробуйте подтвердить это на серверной машине, отправив telnet на этот порт:
telnet localhost 2080
Если он прослушивает, он может ответить.
Ответ №6:
1. Проверьте состояние вашего сервера.
2. Проверьте состояние порта.
Например 3306 netstat -nupl|grep 3306
.
3. Проверьте свои брандмауэры. Например, добавьте 3306
vim /etc/sysconfig/iptables
# add
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
Комментарии:
1. netstat -a помог
Ответ №7:
Хотя, похоже, это не относится к вашей ситуации, иногда ошибка отказа в подключении может также указывать на конфликт ip-адресов в вашей сети. Вы можете выполнить поиск возможных конфликтов ip, выполнив:
arp-scan -I eth0 -l | grep <ipaddress>
и
arping <ipaddress>
Этот вопрос AskUbuntu также содержит дополнительную информацию.
Ответ №8:
Я получаю ту же проблему с моим рабочим компьютером. Проблема в том, что когда вы вводите localhost, он переходит на адрес прокси, а не на локальный адрес, который вы должны обойти, выполните следующие действия
Chrome => Настройки => Изменить настройки прокси => Настройки локальной сети => проверить прокси-сервер обхода локальных адресов.
Комментарии:
1. Это меня исправило. Но в моей версии Chrome это было вызвано «Откройте настройки прокси вашего компьютера», которые открыли настройки моего прокси macOS. Оттуда я добавил подстановочный знак для используемого мной ДВУ (*.test) для своих локальных адресов в разделе «Настройки обхода прокси для хостов и доменов»
Ответ №9:
В Ubuntu попробуйте sudo ufw allow <port_number>
разрешить брандмауэру доступ как к вашему серверу, так и к БД.
Ответ №10:
С точки зрения брандмауэра контрольной точки, вы увидите сообщение от брандмауэра, если вы действительно выберете Отклонить в качестве действия, тем самым раскрывая предполагаемому злоумышленнику наличие брандмауэра перед сервером. Брандмауэр автоматически удалит все подключения, которые не соответствуют политике. Отказ в соединении почти всегда происходит с сервера
Ответ №11:
В моем случае это происходит, когда сайт заблокирован в моей стране, и я не использую VPN. Например, когда я пытаюсь получить доступ vimeo.com из Индонезии, которая заблокирована.
Ответ №12:
- Проверьте,
bind
подключено ли ваше приложение к порту, на который вы отправляете запрос - Проверьте, принимает ли приложение соединения с хоста, на который вы отправляете запрос, возможно, вы забыли разрешить все входящие соединения
0.0.0.0
и по умолчанию разрешены только соединения с127.0.0.1
Ответ №13:
У меня было то же сообщение с совершенно другой причиной: wsock32.dll
не был найден. ::socket(PF_INET, SOCK_STREAM, 0);
Вызов продолжал возвращать INVALID_SOCKET
, но причина заключалась в том, что библиотека DLL winsock не была загружена.
В конце я запустил process monitor от Sysinternals и заметил, что он искал dll «везде», но не нашел ее.
Тихие сбои — это здорово!
Комментарии:
1. INVALID_SOCKET не имеет ничего общего с ‘отказано в соединении’. «Тихие сбои» могут возникать только в том случае, если в вашем коде отсутствует требуемая обработка ошибок.
2. вы имеете в виду, что я должен был проверить, загружена ли библиотека DLL? вероятно, вы правы.