error errno 111 connection refused

im пытается подключиться к локально размещенному брокеру HiveMQ с использованием виртуальной машины RaspberryPi (с использованием виртуальной машины VM VirtualBox). im, используя Mqtt.fx, а также второго клиента, чтобы посмотреть, получают ли опубликованные сообщения.

Я использовал «iot.eclipse.org», прежде чем попытался использовать локальный брокер hivemq, и он работал нормально. поэтому я не слишком уверен, в чем проблема. возможно, я просто что-то забыл.

im, используя модуль paho mqtt. и мой код библиотеки сильно разорван отсюда: https://pypi.python.org/pypi/paho-mqtt

im используя библиотеку/модуль, а затем ссылаясь на это в другом.py файле. Это код из библиотеки/модуля:

и это действительно работает код im. Всего 2 простых издания:

Это сообщение, которое я получил после его запуска:

Тот факт, что он работает на удаленном брокере. и не меня смущает меня.

я отключил большинство плагинов на HiveMQ и оставил плагин журнала сообщений на HiveMQ, так что я не думаю, что это что-то связано с аутентификацией.

Я думаю, что виртуальная машина им использует ubuntu, если это поможет!

I am trying to write a program for file transfer using sockets. The server end of the code is running fine. However, in the client side I get the following error

My code is as follows

I tried looking for help on Google and other posts on Stack Overflow, none of them helped. Can someone please help me? The line numbers may be different since I pasted only some part of the code

1 Answer 1

The problem obviously was (as you figured it out) that port 36250 wasn’t open on the server side at the time you tried to connect (hence connection refused). I can see the server was supposed to open this socket after receiving SEND command on another connection, but it apparently was «not opening [it] up in sync with the client side».

Well, the main reason would be there was no synchronisation whatsoever. Calling:

would just place the data into a OS buffer; close would probably flush the data and push into the network, but it would almost certainly return before the data would reach the server. Adding sleep after close might mitigate the problem, but this is not synchronisation.

The correct solution would be to make sure the server has opened the connection. This would require server sending you some message back (for example OK , or better PORT 36250 to indicate where to connect). This would make sure the server is already listening.

The other thing is you must check the return values of send to make sure how many bytes was taken from your buffer. Or use sendall .

(Sorry for disturbing with this late answer, but I found this to be a high traffic question and I really didn’t like the sleep idea in the comments section.)

Ошибка Connection refused to MongoDB errno 111 может появится в разных ситуациях, у неё могут быть различные причины. Поэтому рассмотрим разные варианты решения.

1. Удаление файла mongod.lock

Одной из вероятных причин может быть файл mongod.lock, который по каким-то причинам не был удалён программой автоматически. Вы можете сделать это и перезапустить службу (перезапуск службы показан на примере для Debian и производных):

2. Настройка bind_ip = localhost в /etc/mongod.conf

При внешнем подключении нужно обязательно в файле /etc/mongod.conf изменить значение директивы bind_ip на

Можно просто закомментировать эту строку.

Даже при внутреннем подключении может провялятся ошибка Connection refused to MongoDB errno 111, то попробуйте заменить bind_ip = localhost на

3. Нет места для размещения базы данных

Эта же самая ошибка может происходить по весьма тривиальной причине – недостаточно место для размещения БД. Проверить количество свободного пространства на жёстком диске можно командой:

Решением в этом случае является увеличение свободного места или перенос базы данных в другое место, для этого в файле /etc/mongodb.conf замените значение директивы

4. Неверные права на директорию /var/lib/mongodb

В некоторых ситуациях, к примеру, при переносе файлов БД на другой сервер и размещении их в каталог /var/lib/mongodb под учётной записью суперпользователя, может получится так, что владельцем каталога /var/lib/mongodb (в котором хранятся базы данных) будет не mongod. Чтобы это исправить нужно выполнить команды вида:

Если вы не меняли значение директории с БД по умолчанию, то команды будут такими:

5. Проблемы с SELinux

В этом случае вам должны помочь команды:

Возможно, здесь перечислены далеко не все причины ошибки «Connection refused to MongoDB errno 111», но, по крайней мере, рассмотрены самые частые с конкретными решениями.

Кстати, о том, как правильно делать резервные копии БД MongoDB можно почитать в официальной документации (на английском):

Оцените статью