Каков наилучший способ передачи данных с помощью удаленного приложения через Интернет?

#python #networking #network-programming

#python #сеть #сетевое программирование

Вопрос:

Я создаю относительно простую программу, которая также будет запущена на нескольких компьютерах друзей, и им нужно поделиться некоторой информацией. Им нужно будет обмениваться IP-адресами на случай, если они будут изменены через dhcp, и, возможно, несколькими другими вещами в будущем, но прямо сейчас это все (вероятно, это будет использовано для обновления программы, если я когда-нибудь изменю ее тоже, я полагаю).

Если есть лучший способ, без использования сервера-посредника, не допустить потери IP-адреса, который тоже был бы полезен, но в худшем случае я могу просто позвонить им и спросить, поскольку это случается крайне редко, если вообще случается. Я полагаю, что наши интернет-провайдеры обновляются каждые 30 дней, и они все равно часто сохраняют один и тот же, поэтому я сомневаюсь, что это когда-либо будет проблемой, но если это происходит так редко, это было бы небольшим неудобством.

Я раньше мало занимался сетевым программированием / написанием сценариев, поэтому не уверен, с чего начать. Я использовал urllib / urllib2 и mechanize, но я предполагаю, что они, хотя и могли бы работать, не являются элегантным решением. Я думал, что компьютеры будут просто обмениваться данными через указанный порт и просто прослушивать через него, но я не знаю, какой модуль будет обрабатывать такую вещь.

Спасибо, друзья.

Комментарии:

1. «Я предполагаю, что это, хотя и могло бы работать, не является элегантным решением» Почему бы и нет? Пожалуйста, объясните, почему один из вас не может запустить FTP-сервер, а другие запускают FTP-клиенты?

Ответ №1:

Если вас больше всего беспокоит смена IP-адреса, такая служба, как dyndns.com это, безусловно, было бы полезно. (Вы также можете использовать автоматические клиенты, которые обновят вашу запись DNS при изменении вашего IP-адреса.)

После этого для передачи данных вам, вероятно, лучше использовать существующие протоколы (например, HTTP, FTP, …). Например, существует множество существующих библиотек HTTP-серверов. Возможно, что-то, основанное на этом, было бы интересно: http://docs.python.org/library/basehttpserver.html

Комментарии:

1. Я тоже думал об этом, поскольку у меня есть (очень небольшой) опыт использования этого модуля, но я решил, что может быть еще более экономичный способ сделать это. Это, безусловно, может сработать, хотя, если не предложить ничего лучшего.

2. Я поддержу это, HTTP на сегодняшний день является самым простым способом передачи файлов по сети. Встроенные HTTP-клиентские библиотеки Python в некотором роде ужасны — рассмотрите возможность использования httplib2, если они начнут действовать вам на нервы 😉

3. Хорошо, после двух предложений по этому поводу я думаю, что это тот подход, который я выберу, и спасибо за рекомендацию по статическому httplib2, я не слышал об этом раньше.